Tham gia danh sách các mục với các loại khác nhau dưới dạng chuỗi trong Python


292

Tôi cần tham gia một danh sách các mặt hàng. Nhiều mục trong danh sách là các giá trị nguyên được trả về từ một hàm; I E,

myList.append(munfunc()) 

Làm thế nào tôi nên chuyển đổi kết quả trả về thành một chuỗi để tham gia nó với danh sách?

Tôi có cần phải làm như sau cho mọi giá trị số nguyên không:

myList.append(str(myfunc()))

Có cách nào khác để Pythonic giải quyết vấn đề đúc không?


3
Xin vui lòng, đảm bảo bạn sử dụng ngữ pháp tốt để mọi người có thể hiểu những gì bạn đang hỏi và / hoặc đọc lại câu hỏi của bạn trước khi đăng.
mã allyour

Câu trả lời:


535

Gọi str(...)là cách Pythonic để chuyển đổi một cái gì đó thành một chuỗi.

Bạn có thể muốn xem xét lý do tại sao bạn muốn có một danh sách các chuỗi. Thay vào đó, bạn có thể giữ nó dưới dạng danh sách các số nguyên và chỉ chuyển đổi các số nguyên thành chuỗi khi bạn cần hiển thị chúng. Ví dụ: nếu bạn có một danh sách các số nguyên thì bạn có thể chuyển đổi từng số một trong một vòng lặp for và tham gia chúng với ,:

print(','.join(str(x) for x in list_of_ints))

175

Không có gì sai khi chuyển số nguyên cho str. Một lý do bạn có thể không làm điều này là myList thực sự được coi là một danh sách các số nguyên, ví dụ như sẽ hợp lý khi tính tổng các giá trị trong danh sách. Trong trường hợp đó, đừng chuyển ints của bạn vào str trước khi thêm chúng vào myList. Nếu bạn cuối cùng không chuyển đổi thành chuỗi trước khi nối thêm, bạn có thể tạo một chuỗi lớn bằng cách thực hiện một số thứ như

', '.join(map(str, myList))

36
Có lẽ tiếng Anh không phải là tiếng mẹ đẻ của mình. Bạn không chắc chắn về mong muốn của anh ấy để tham gia một danh sách các mặt hàng mà anh ấy đang chuyển đổi sang str? Vui lòng xem xét khả năng bạn cần thêm một số logic mờ vào trình phân tích cú pháp của mình ;-)
John Machin

3
@ John Tôi đã xem xét điều đó, nhưng nếu anh ấy giỏi tiếng Anh, tôi muốn nhẹ nhàng thúc đẩy anh ấy đưa trình độ tiếng Anh trên SO lên mức bình thường. Tôi nghĩ rằng câu trả lời của tôi giải trí nhiều cách giải thích và tình huống mà anh ấy có thể tham gia.
allyourcode

41

chức năng bản đồ trong python có thể được sử dụng. Phải mất hai đối số. Đối số đầu tiên là hàm phải được sử dụng cho từng thành phần của danh sách. Đối số thứ hai là lặp lại .

a = [1, 2, 3]   
map(str, a)  
['1', '2', '3']

Sau khi chuyển đổi danh sách thành chuỗi, bạn có thể sử dụng chức năng nối đơn giản để kết hợp danh sách thành một chuỗi

a = map(str, a)    
''.join(a)      
'123'

10
a=[1,2,3]
b=[str(x) for x in a]
print b

phương pháp trên là cách dễ nhất và chung nhất để chuyển đổi danh sách thành chuỗi. một phương pháp ngắn khác là-

a=[1,2,3]
b=map(str,a)
print b

4

Có ba cách để làm điều này.

giả sử bạn có một danh sách các số nguyên

my_list = [100,200,300]
  1. "-".join(str(n) for n in my_list)
  2. "-".join([str(n) for n in my_list])
  3. "-".join(map(str, my_list))

Tuy nhiên, như đã nêu trong ví dụ về timeit trên trang web python tại https://docs.python.org/2/l Library / timeit.html sử dụng bản đồ sẽ nhanh hơn. Vì vậy, tôi khuyên bạn nên sử dụng"-".join(map(str, my_list))


2

Vấn đề của bạn khá rõ ràng. Có lẽ bạn đang tìm kiếm phần mở rộng, để thêm tất cả các yếu tố của một danh sách khác vào danh sách hiện có:

>>> x = [1,2]
>>> x.extend([3,4,5])
>>> x
[1, 2, 3, 4, 5]

Nếu bạn muốn chuyển đổi số nguyên thành chuỗi, hãy sử dụng phép nội suy str () hoặc chuỗi, có thể kết hợp với cách hiểu danh sách, nghĩa là

>>> x = ['1', '2']
>>> x.extend([str(i) for i in range(3, 6)])
>>> x
['1', '2', '3', '4', '5']

Tất cả điều này được coi là pythonic (ok, một biểu thức trình tạo thậm chí còn nhiều pythonic hơn nhưng hãy đơn giản và theo chủ đề)


2

Ví dụ:

lst_points = [[313, 262, 470, 482], [551, 254, 697, 449]]

lst_s_points = [" ".join(map(str, lst)) for lst in lst_points]
print lst_s_points
# ['313 262 470 482', '551 254 697 449']

Đối với tôi, tôi muốn thêm một strdanh sách trước mỗi danh sách str:

# here o means class, other four points means coordinate
print ['0 ' + " ".join(map(str, lst)) for lst in lst_points]
# ['0 313 262 470 482', '0 551 254 697 449']

Hoặc danh sách đơn:

lst = [313, 262, 470, 482]
lst_str = [str(i) for i in lst]
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

lst_str = map(str, lst)
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

1

Có thể bạn không cần số dưới dạng chuỗi, chỉ cần làm:

functaulu = [munfunc(arg) for arg in range(loppu)]

Sau này nếu bạn cần nó dưới dạng chuỗi, bạn có thể thực hiện bằng chuỗi hoặc với chuỗi định dạng:

print "Vastaus5 = %s" % functaulu[5]


-1

Làm thế nào mà không ai thích repr?
trăn 3.7.2:

>>> int_list = [1, 2, 3, 4, 5]
>>> print(repr(int_list))
[1, 2, 3, 4, 5]
>>> 

Hãy cẩn thận, đó là một đại diện rõ ràng. Một ví dụ cho thấy:

#Print repr(object) backwards
>>> print(repr(int_list)[::-1])
]5 ,4 ,3 ,2 ,1[
>>> 

thêm thông tin tại pydocs-repr

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.