Cách trích xuất số nguyên từ danh sách trong python

Chuỗi là một mảng byte đại diện cho các ký tự Unicode được đặt trong dấu nháy đơn, kép hoặc ba. Các ký tự kèm theo có thể là chữ số, bảng chữ cái hoặc ký hiệu đặc biệt. Chuỗi chỉ là một văn bản bình thường và con người có thể đọc được. Các chuỗi là bất biến trong Python. Điều đó có nghĩa là một khi đối tượng chuỗi được xác định thì không thể thay đổi nó

Ở đây chúng ta sẽ có một chuỗi được tạo thành từ các số và bảng chữ cái,

string_var = 'MSD scored 10773  runs in ODI cricket at the avg of 50 in 350 matched.'

# type() will print data type of string_var
print(type(string_var))

ĐẦU RA

Bạn có thể thấy chúng tôi có một chuỗi với một số số trong đó. Công việc của chúng ta là trích xuất những con số đó bằng ngôn ngữ lập trình python

Trích xuất các số từ chuỗi bằng cách sử dụng isdigit() trong Danh sách hiểu

Trong phương pháp này, chúng ta sẽ sử dụng kết hợp ba phương thức khác nhau để trích xuất số từ một chuỗi đã cho. Phương thức List Comprehension, isdigit() và split() là ba phương thức khác nhau

Khả năng hiểu danh sách là một cú pháp ngắn hơn dựa trên điều kiện mà qua đó bạn có thể lọc các giá trị trong một danh sách mới. Ở đây trong phương pháp này,

  • Phương thức split() chuyển đổi chuỗi thành danh sách các chuỗi con
  • Tính năng Hiểu danh sách lặp lại danh sách chuỗi con này,
  • Trong quá trình lặp lại các chuỗi con, phương thức isdigit() giúp kiểm tra các chữ số

Điều này chúng ta có thể trích xuất tất cả các số từ một chuỗi trong danh sách. Hãy xem ví dụ hoàn chỉnh,

THÍ DỤ

string_var = 'MSD scored 10773  runs in ODI cricket at the avg of 50.58 in 350 matched.'

numbers = [int(new_string) for new_string in str.split(string_var) if new_string.isdigit()]

print(numbers)

# type() will print data type of string_var
print(type(numbers))

ĐẦU RA

[10773, 350]

Ở đây bạn có thể thấy với sự kết hợp của ba phương pháp khác nhau, chúng tôi đã trích xuất thành công các số từ một chuỗi. Nhưng phương pháp này có một lỗ hổng là bạn có thể thấy nó không in ra avg, thuộc kiểu dữ liệu float

Trích xuất số từ chuỗi bằng re. phương thức findall()

Bây giờ chúng ta sẽ sử dụng phương thức findall() của regex module trong Python. Mô-đun re là viết tắt của Cụm từ thông dụng, đi kèm với thư viện python

Nó sử dụng ký tự gạch chéo ngược ('\') để biểu thị các dạng đặc biệt. Ở đó. findall() quét chuỗi đã cho từ trái sang phải và kiểm tra xem chuỗi đã cho có mẫu được chỉ định có thể ở dạng chữ số hoặc bất kỳ loại dữ liệu nào khác không. Nó trả về một danh sách với tất cả các giá trị phù hợp. Hãy xem một ví dụ

THÍ DỤ

import re

string_var = 'MSD scored 10773  runs in ODI cricket at the avg of 50.58 in 350 matched.'

x = [float(x) for x in re.findall(r'-?\d+\.?\d*',string_var)]

print(x)

ĐẦU RA

[10773.0, 50.58, 350.0]

Trong ví dụ trên, bạn có thể thấy sử dụng re. findall() đã trả về tất cả các số trong str_var trong danh sách x bằng cách sử dụng tính năng Hiểu danh sách

Trích xuất các số từ chuỗi bằng các phương thức split() và append()

Một cách khác mà chúng ta có thể trích xuất các số từ một chuỗi đã cho là sử dụng kết hợp hàm split() và append(). Trong phương thức này, chúng ta sẽ sử dụng phương thức split() để tách chuỗi đã cho và nối nó vào danh sách

  • tách ra(). Hàm tích hợp sẵn của python được sử dụng để tách chuỗi thành danh sách
  • nối thêm (). Chức năng tích hợp sẵn của python được sử dụng để thêm một mục vào cuối danh sách

Hãy xem một ví dụ về phương pháp này

THÍ DỤ

string_var = 'MSD scored 10773  runs in ODI cricket at the avg of 50.58 in 350 matched.'
x = []

# Iterate over the words in a string
for i in string_var.split():
    try:
        # Convert word to float and add in list
        x.append(float(i))
    except ValueError :
        pass

print(x)

ĐẦU RA

[10773.0, 50.58, 350.0]

Trong ví dụ trên, bạn có thể thấy cách chúng tôi sử dụng cả hai phương thức split() và append() để trích xuất các số từ str_var. Ở đây chúng tôi luôn ngoại trừ một ValueError. Nếu try và except không được sử dụng ở đây, thì nó sẽ báo lỗi như thế này

________số 8

Về cơ bản, chúng tôi đã lặp lại tất cả các từ trong một chuỗi và với mỗi từ, chúng tôi đã chuyển đổi nó thành float và thêm vào danh sách. Nếu bất kỳ từ nào không phải là số thì float() sẽ đưa ra lỗi mà chúng tôi đã bắt và bỏ qua

Trích xuất số từ chuỗi bằng thư viện nums_from_string

Phương thức tiếp theo mà chúng ta sẽ sử dụng là hàm get_nums() của thư viện nums_from_string. Thư viện này không đi kèm với Python, vì vậy chúng tôi phải cài đặt nó. Chỉ cần gõ pip install nums from_string trong thiết bị đầu cuối của bạn. Sau khi cài đặt, đây là phương pháp đơn giản nhất để chúng ta có thể trích xuất các số từ chuỗi

Nhìn mã dưới đây

THÍ DỤ

import nums_from_string

string_var = 'MSD scored 10773  runs in ODI cricket at the avg of 50.58 in 350 matched.'
print(nums_from_string.get_nums(string_var))

ĐẦU RA

0

Bạn có thể thấy trong ví dụ trên thông qua nums_from_string, chúng ta có thể trích xuất thành công các số từ chuỗi mà không chỉ định bất kỳ loại dữ liệu nào như float hoặc int, v.v.

Tóm lược

Vì vậy, chúng ta đã thấy bốn phương pháp khác nhau mà qua đó chúng ta có thể trích xuất các số từ một chuỗi trong Python. Phương pháp đơn giản nhất là get_nums(), đây là một chức năng của thư viện nums_from_string. Nhược điểm duy nhất của nó là nó không đi kèm với python và bạn phải cài đặt nó. Các phương thức khác như isdigit() có thể không hữu ích vì nó không trích xuất các số kiểu float. Trong phương pháp 3, bạn phải xử lý lỗi nếu không nó sẽ ném ValueError. Chúng tôi đã sử dụng Python 3. 10. 1 để viết mã ví dụ. Để kiểm tra phiên bản của bạn, hãy viết python –version trong thiết bị đầu cuối của bạn