两个列表合并成字符串
问题描述:
其实我想两个清单合并成一个字符串,但让他们有序的意思是:两个列表合并成字符串
list1 = [1,2,3,4,5]
list2 = ["one", "two", "three", "four", "five"]
result = "1one2two3three4four5five"
(名单始终具有相同的长度,但在内容上有所不同)
在我做这样的时刻:
result = ""
i = 0
for entry in list1:
result += entry + list2[i]
i += 1
我想一定要做到这一点更Python的方式,但我不知道它实际上。
可能有人可以帮我解决这个问题。
答
list1 = [1,2,3,4,5]
list2 = ["one", "two", "three", "four", "five"]
print ''.join([str(a) + b for a,b in zip(list1,list2)])
1one2two3three4four5five
答
>>> ''.join(str(n)+s for (n,s) in zip(list1, list2))
'1one2two3three4four5five'
这里:
-
for (n,s) in zip(list1, list2)
迭代对元素的list1
和list2
(即1
和"one"
等); -
str(n)+s
将每一对转换为一个字符串(例如"1one"
); -
''.join(...)
将结果合并到单个字符串中。
答
>>> import itertools
>>> ''.join(map(str, itertools.chain.from_iterable(zip(list1, list2))))
1one2two3three4four5five'
说明:
-
zip(list1, list2)
创建包含匹配元素的元组从两个列表的列表:>>> zip(list1, list2) [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')]
-
itertools.chain.from_iterable()
变平该嵌套列表:>>> list(chain.from_iterable(zip(list1, list2))) [1, 'one', 2, 'two', 3, 'three', 4, 'four', 5, 'five']
现在,我们需要确保只有字符串,所以我们用
map()
- 最终
''.join(...)
合并列表项组合成一个字符串没有分隔适用str()
所有项目。
答
使用string formatting与str.join()
和zip()
:
>>> list1 = [1,2,3,4,5]
>>> list2 = ["one", "two", "three", "four", "five"]
>>> "".join("{0}{1}".format(x,y) for x,y in zip(list1,list2))
'1one2two3three4four5five'
zip(list1,list2)
回报是这样的: [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')]
。
现在对于此列表中的每个项目,我们应用字符串格式,然后使用str.join()
加入整个生成器表达式。
这是一个[generator表达式](http://www.youtube.com/watch?v=pShL9DCSIUw),与['str.join()']一起使用(http://docs.python.org/3.3 /library/stdtypes.html#str.join)。 –
使它成为一个列表理解,它会更快。通过给予'。因为'.join()'需要扫描输入两次,一次计算输出的总长度,一次产生输出,因此Python必须从它创建一个列表。 '[list comprehension]'比'list(generator expression)'快。 –
@MartijnPieters真实但简单可能更重要 – jamylak