2012-11-11 24 views
15

Đã thực hiện một số tìm kiếm thông qua Stack Exchange đã trả lời các câu hỏi nhưng không thể tìm thấy những gì tôi đang tìm kiếm.Chuẩn bị cùng một chuỗi cho tất cả các mục trong danh sách

Với danh sách sau đây:

a = [1, 2, 3, 4] 

Làm thế nào tôi sẽ tạo ra:

a = ['hello1', 'hello2', 'hello3', 'hello4'] 

Cảm ơn!

+1

bạn có thể chỉnh sửa bài viết của bạn để đặt dấu ngoặc kép quanh dây? – Nicolas

+0

Xin lỗi về điều đó - vẫn còn rất mới mẻ với python! –

Trả lời

32

Sử dụng một list comprehension:

['hello{0}'.format(i) for i in a] 

Một danh sách hiểu cho phép bạn áp dụng một biểu thức để mỗi phần tử trong một chuỗi.

Demo:

>>> a = [1,2,3,4] 
>>> ['hello{0}'.format(i) for i in a] 
['hello1', 'hello2', 'hello3', 'hello4'] 
+0

oh ngọt ngào! Cảm ơn bạn rất nhiều. Tôi chắc chắn có một cấu trúc hữu ích trong Python để làm điều này. Sẽ biến mất và đọc thêm về việc hiểu danh sách. –

1

sử dụng một list comprehension:

In [1]: a = [1,2,3,4] 

In [2]: ["hello" + str(x) for x in a] 
Out[2]: ['hello1', 'hello2', 'hello3', 'hello4'] 
+0

Đây có phải là cách ít hay nhiều hơn so với câu trả lời đầu tiên? Tôi thấy nó dễ đọc hơn một chút. Đây là cơ bản giống như phương pháp định dạng dưới mui xe? –

+2

không thể nói nếu nó là pythonic, nhưng nó đòi hỏi phải chuyển đổi 'int' thành' string' đầu tiên mà có thể dễ dàng xử lý bởi 'format()', vì vậy hãy tìm câu trả lời 'format()'. –

+0

Cảm ơn @AshwiniChaudhary. Rất hữu ích. –

7

Thêm một lựa chọn là sử dụng built-in map function:

a = range(10) 
map(lambda x: 'hello%i' % x, a) 

Chỉnh sửa theo WolframH bình luận:

map('hello{0}'.format, a) 
+0

Cảm ơn bạn. Người đàn ông, tôi có rất nhiều thứ để học. –

+0

Bạn được chào đón –

+3

Hoặc sử dụng 'map ('hello {0}'. Format, a)', đặc biệt nếu bạn chưa biết 'lambda'. Lưu ý: trong Python 3.x 'map' không trả về một' list' (nhưng một đối tượng iterable khác, có thể được chuyển đổi thành một 'list' bằng cách sử dụng' list() '. – WolframH

Các vấn đề liên quan