Làm cách nào để bạn chuyển đổi danh sách chuỗi thành danh sách số nguyên trong Python?
Python Chuyển đổi danh sách thành chuỗi. Pyt
Vui lòng bật JavaScript
Python Chuyển đổi danh sách thành chuỗi. Hướng dẫn Python 2022. Phương thức tham gia PythonĐể chuyển đổi danh sách chuỗi thành danh sách số nguyên, hãy sử dụng hàm
>>> print[*map[int, my_list]]4 tích hợp nếu bạn biết tất cả nội dung của danh sách ban đầu sẽ chuyển đổi thành số nguyên, nếu không, hãy sử dụng hàm
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> print[*map[int, my_list]]5 trong
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> print[*map[int, my_list]]4 của bạn hoặc sử dụng cách hiểu danh sách có điều kiện
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Hãy xem cách bạn có thể thay đổi danh sách ban đầu của mình bằng cách sử dụng các phương pháp dưới đây
Sửa đổi danh sách bằng cách sử dụng >>> print[*map[int, my_list]]
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
4
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> print[*map[int, my_list]]8 tích hợp có 2 tham số. đầu tiên là chức năng [
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> print[*map[int, my_list]]9] để sửa đổi từng phần tử trong lần lặp của tham số thứ hai [
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
list[map[int, string_list]]0].
>>> print[*map[int, my_list]]9 chỉ cần một tham số vì hàm
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> print[*map[int, my_list]]4 chèn từng phần tử từ iterable vào hàm
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Nếu bạn có một danh sách các chuỗi có thể thay đổi gọn gàng thành số nguyên, bạn có thể giải quyết vấn đề này bằng cách chèn phương thức tích hợp sẵn
list[map[int, string_list]]3 [chỉ nhận một tham số] và sử dụng phương thức này làm tham số đầu tiên cho hàm
>>> print[*map[int, my_list]]4
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Đây là cách nó sẽ trông như thế nào
>>> my_list = ['1', '2', '3']
>>> map[int, my_list]
Như bạn có thể thấy từ kết quả trên từ Python REPL của tôi, đầu ra là một
list[map[int, string_list]]5
Để kiểm tra nội dung của
list[map[int, string_list]]5, bạn có thể sử dụng hàm
list[map[int, string_list]]7 với toán tử dấu hoa thị trên hàm
list[map[int, string_list]]8, nhưng vì điều này sẽ khiến bạn khó xác định liệu có thay đổi thực sự đối với các thành phần hay không nên tôi sẽ đưa kết quả vào
Đây là những gì bạn sẽ thấy khi kiểm tra
list[map[int, string_list]]5
>>> print[*map[int, my_list]]
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Từ đoạn mã trên, bạn có thể thấy rằng bằng cách sử dụng toán tử dấu hoa thị, rất khó để xác định xem các giá trị có thay đổi hay không. Tuy nhiên, việc sử dụng hàm có sẵn
list[map[int, string_list]]9 hiển thị rõ ràng các giá trị trong danh sách mới là số nguyên không phải chuỗi – và bạn có thể thấy sự khác biệt giữa danh sách chuỗi [danh sách gốc] và danh sách mới với cách cả hai đều xuất ra danh sách
Thêm thông báo về cách danh sách nguồn ban đầu không bị sửa đổi. Do đó, hàm
>>> print[*map[int, my_list]]4 không làm thay đổi khả năng lặp được truyền vào tham số thứ hai của nó
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Do đó, để thay đổi danh sách các chuỗi thành danh sách các số nguyên, bạn có thể sử dụng một lớp lót sau
list[map[int, string_list]]
Trong đó
>>> my_list = ['1', '2', 'e']3 là biến nguồn chứa danh sách các chuỗi
>>> list[map[int, my_list]]
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: 'e'
Nhưng nếu danh sách chuỗi ban đầu chứa các chuỗi không thể chuyển đổi thành số nguyên thì sao?
Giả sử bạn có danh sách sau với một phần tử trong danh sách không thể dễ dàng chuyển đổi thành số nguyên bằng cách sử dụng hàm
list[map[int, string_list]]3
>>> my_list = ['1', '2', 'e']
>>> list[map[int, my_list]]
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: 'e'
Như bạn có thể thấy, việc cố gắng buộc chuyển đổi trên một phần tử sẽ không thay đổi thành số nguyên bằng cách sử dụng phương pháp
list[map[int, string_list]]3 sẽ tạo ra một
>>> my_list = ['1', '2', 'e']6
>>> list[map[int, my_list]]
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: 'e'
Đây là nơi nếu có khả năng danh sách nguồn của bạn có thể chứa các phần tử không dễ dàng chuyển đổi thành số nguyên mà bạn sẽ cần áp dụng tính năng lọc
Sử dụng >>> print[*map[int, my_list]]
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
5 với >>> my_list = ['1', '2', 'e']
>>> list[map[int, my_list]]
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: 'e'
8 làm bộ lọc trong hàm list[map[int, string_list]]
8
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> list[map[int, my_list]]
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: 'e'
Một phương tiện để có thể cung cấp bộ lọc trên các giá trị được lặp lại thông qua việc sử dụng hàm
list[map[int, string_list]]8 là thay thế tham số
>>> print[*map[int, my_list]]9 [tham số đầu tiên trong hàm
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
list[map[int, string_list]]8] mà tôi hiện có dưới dạng hàm
list[map[int, string_list]]3 là thay đổi nó bằng một tùy chỉnh
>>> print[*map[int, my_list]]5
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Khi hàm
>>> print[*map[int, my_list]]4 chuyển mỗi lần lặp lại cho hàm
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> print[*map[int, my_list]]9 trong tham số đầu tiên, hàm
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> print[*map[int, my_list]]5 chỉ cần một tham số, như vậy
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
lambda x: rest of function goes here
Sau đó, vấn đề là làm việc ở phía bên phải của cuộc gọi
>>> print[*map[int, my_list]]5 để tạo ra những gì bạn muốn trả về
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Trường hợp của chúng ta ở đây là xác định xem giá trị được truyền vào [được biểu thị bằng tham số
lambda x: rest of function goes here9 cho mỗi giá trị từ danh sách chuỗi] có chuyển đổi thành số nguyên hay không, nếu không thì bạn có thể loại bỏ nó và tiếp tục
Cách chuyển đổi chuỗi thành số nguyên mà không cần sử dụng >>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
0
>>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
Một phương pháp kiểm tra xem một chuỗi có thay đổi thành số nguyên không mà không sử dụng câu lệnh
>>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
1 hay không là thay thế tất cả các số trong chuỗi bằng một chuỗi rỗng và xem liệu còn sót lại thứ gì khôngNguyên tắc trông giống như thế này
>>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
Như bạn có thể thấy từ hai ví dụ trên, sau khi nhập thư viện regex bằng câu lệnh
>>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
2, tôi đã tạo một chuỗi có nhãn >>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
3 chứa tất cả các số nguyên. Sử dụng phương pháp >>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
4 [thay thế biểu thức chính quy], tôi đã chèn mẫu biểu thức chính quy vào ba tham số của nó để tìm tất cả các chữ số [>>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
5], đầu tiên, chuỗi rỗng >>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
6 để thay thế cho từng chữ số được tìm thấy, thứ hai và cuối cùng là chuỗi để thực hiện thao tác trênBằng cách gói
>>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
4 với >>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
8, sau đó tôi có thể xác định độ dài của chuỗi còn lại sau khi thay thế đã xảy ra. Trong ví dụ đầu tiên của tôi ở trên, chuỗi cuối cùng có độ dài 0 vì tất cả các ký tự trong chuỗi đều là chữ số, trong khi ví dụ thứ hai có độ dài 1 vì một ký tự trong chuỗi không phải là chữ sốSử dụng phương pháp tương tự này trong hàm
>>> print[*map[int, my_list]]5 sẽ giống như thế này
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
lambda x: int[x] if len[x] > 0 and len[re.sub[r'\d+', '', x]] == 0 else None
Trong hàm
>>> print[*map[int, my_list]]5 ở trên, tôi đã giả sử nhập thư viện regex. Nếu bạn muốn loại trừ việc nhập thư viện, bạn có thể sử dụng phương thức chuỗi tích hợp sẵn
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
lambda x: int[x] if len[x] > 0 and len[re.sub[r'\d+', '', x]] == 0 else None1 để làm điều tương tự, tuy nhiên, mỗi chữ số sẽ cần phải được xâu chuỗi lại với nhau, điều này làm cho biểu thức rất dài
Đây là biểu thức
>>> print[*map[int, my_list]]5 ở trên sẽ trông như thế nào nếu không có câu lệnh
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
>>> import re
>>> a_string = '123'
>>> len[re.sub[r'\d+', '', a_string]]
0
>>> b_string = '123A123'
>>> len[re.sub[r'\d+', '', b_string]]
1
2 và sử dụng cách tiếp cận lambda x: int[x] if len[x] > 0 and len[re.sub[r'\d+', '', x]] == 0 else None1
lambda x: int[x] if len[x] > 0 and len[x.replace['0', ''].replace['1', ''].replace['2', ''].replace['3', ''].replace['4', ''].replace['5', ''].replace['6', ''].replace['7', ''].replace['8', ''].replace['9', ''] == 0 else None
Như bạn có thể thấy khi so sánh cả hai cách tiếp cận, việc nhập thư viện Regex nhỏ hơn, đơn giản hơn rất nhiều và do đó ít mắc lỗi hơn
Bên cạnh việc thay thế các chuỗi chữ số thành các chuỗi trống, tôi cũng đã thêm một bước kiểm tra sơ bộ để đảm bảo rằng một giá trị đang được chuyển vào hàm
>>> print[*map[int, my_list]]5 bằng cách viết mã
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
lambda x: int[x] if len[x] > 0 and len[re.sub[r'\d+', '', x]] == 0 else None6. Điều này sẽ ngăn chặn bất kỳ dương tính giả đi qua
>>> a_var = ''
>>> int[a_var] if len[re.sub[r'\d+', '', a_var]] == 0 else None
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: ''
Như bạn có thể thấy biến ban đầu
lambda x: int[x] if len[x] > 0 and len[re.sub[r'\d+', '', x]] == 0 else None7 giữ một chuỗi trống có thể trượt qua các vết nứt nếu ban đầu không kiểm tra độ dài. Do đó,
lambda x: int[x] if len[x] > 0 and len[re.sub[r'\d+', '', x]] == 0 else None6 là cần thiết để ngăn điều này xảy ra
Điều gì xảy ra nếu chuỗi số nguyên chứa hàng nghìn dấu phân cách [như dấu phẩy hoặc dấu chấm]?
Một chuỗi số nguyên vẫn có thể hợp lệ nhưng nó có thể chứa các ký tự khác để phân tách hàng nghìn vị trí, chẳng hạn như
lambda x: int[x] if len[x] > 0 and len[re.sub[r'\d+', '', x]] == 0 else None9 để biểu thị một triệu. Nếu điều này là cần thiết cho trường hợp sử dụng của bạn thì bạn có thể thêm vào phần thay thế dấu phẩy hoặc dấu chấm cần thiết
Đây là cách điều này sẽ tìm kiếm cho từng phương pháp
lambda x: int[x.replace[',', '']] if len[x] > 0 and len[re.sub[r'\d+|,', '', x]] == 0 else None
>>> print[*map[int, my_list]]0
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Kiểm tra kết quả mã của chúng tôi trong Python REPL sẽ giống như thế này
>>> print[*map[int, my_list]]1
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Kết quả đạt được bằng cách sử dụng mã ở trên để giúp loại bỏ bất kỳ dấu phân cách hàng nghìn nào, chẳng hạn như dấu phẩy và tất cả trong một dòng mã
Nhưng lưu ý rằng kết quả tạo ra một danh sách có cùng kích thước với danh sách ban đầu với
lambda x: int[x] if len[x] > 0 and len[x.replace['0', ''].replace['1', ''].replace['2', ''].replace['3', ''].replace['4', ''].replace['5', ''].replace['6', ''].replace['7', ''].replace['8', ''].replace['9', ''] == 0 else None0 cho bất kỳ phần tử nào không thể dễ dàng chuyển đổi thành số nguyên
Bạn có thể thay đổi hàm
>>> print[*map[int, my_list]]5 để báo cáo các phần tử không thể thay đổi bằng cách tráo đổi
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
lambda x: int[x] if len[x] > 0 and len[x.replace['0', ''].replace['1', ''].replace['2', ''].replace['3', ''].replace['4', ''].replace['5', ''].replace['6', ''].replace['7', ''].replace['8', ''].replace['9', ''] == 0 else None0 trong câu lệnh
lambda x: int[x] if len[x] > 0 and len[x.replace['0', ''].replace['1', ''].replace['2', ''].replace['3', ''].replace['4', ''].replace['5', ''].replace['6', ''].replace['7', ''].replace['8', ''].replace['9', ''] == 0 else None3 với
lambda x: rest of function goes here9, như thế này
>>> print[*map[int, my_list]]2
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Báo cáo các phần tử ban đầu trở lại danh sách có thể hữu ích nếu cần thêm công việc chuyển đổi chuỗi
Nếu danh sách mới loại bỏ bất kỳ phần tử nào sẽ không được chuyển đổi thành số nguyên, bạn có thể sử dụng cách tiếp cận khác bằng cách sử dụng khả năng hiểu danh sách
Lọc và loại bỏ các phần tử mà không cần sử dụng >>> print[*map[int, my_list]]
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
4
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Để lọc các phần tử từ danh sách gốc dựa trên các điều kiện nhất định, bạn có thể sử dụng tính năng hiểu danh sách tiện dụng
Với các ví dụ hoạt động hiện tại, đây là cách thức hoạt động của nó
>>> print[*map[int, my_list]]3
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
Sự khác biệt lớn nhất với khả năng hiểu danh sách so với hàm
>>> print[*map[int, my_list]]4 là xử lý các trường hợp
1 2 3
>>> list[map[int, my_list]]
[1, 2, 3]
>>> print[my_list]
['1', '2', '3']
lambda x: int[x] if len[x] > 0 and len[x.replace['0', ''].replace['1', ''].replace['2', ''].replace['3', ''].replace['4', ''].replace['5', ''].replace['6', ''].replace['7', ''].replace['8', ''].replace['9', ''] == 0 else None7. Trong cách hiểu danh sách ở trên, điều kiện
>>> my_list = ['1', '2', 'e']8 lọc từng phần tử theo điều kiện và nếu nó không đáp ứng tiêu chí này thì phần tử đó sẽ không được đưa lên phía trước câu lệnh
>>> list[map[int, my_list]]
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: 'e'
lambda x: int[x] if len[x] > 0 and len[x.replace['0', ''].replace['1', ''].replace['2', ''].replace['3', ''].replace['4', ''].replace['5', ''].replace['6', ''].replace['7', ''].replace['8', ''].replace['9', ''] == 0 else None9
Tóm lược
Khả năng hiểu danh sách cung cấp một đoạn mã đơn giản có thể dễ dàng chuyển đổi danh sách chuỗi thành số nguyên và loại bỏ bất kỳ phần tử nào trong danh sách không thể dễ dàng chuyển đổi thành số nguyên
Nếu điều quan trọng là phải đặt thứ gì đó vào danh sách số nguyên mới hoặc để hiển thị các phần tử từ danh sách ban đầu không thể thay đổi, bạn có thể báo cáo lại phần tử ban đầu hoặc một giá trị mặc định, chẳng hạn như
lambda x: int[x] if len[x] > 0 and len[x.replace['0', ''].replace['1', ''].replace['2', ''].replace['3', ''].replace['4', ''].replace['5', ''].replace['6', ''].replace['7', ''].replace['8', ''].replace['9', ''] == 0 else None0 hoặc
>>> a_var = ''
>>> int[a_var] if len[re.sub[r'\d+', '', a_var]] == 0 else None
Traceback [most recent call last]:
File "", line 1, in
ValueError: invalid literal for int[] with base 10: ''
1 để thay thế