实际上我正在尝试将两个列表合并为一个字符串,但保留它们的含义:
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
我认为必须有更多的pythonic方式来做到这一点,但我实际上并不知道。
愿你们中的某些人能够帮助我解决这个问题。
答案 0 :(得分:11)
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
答案 1 :(得分:3)
将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()
加入整个生成器表达式。
答案 2 :(得分:2)
>>> ''.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(...)
将结果合并为一个字符串。答案 3 :(得分:2)
>>> 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']
现在我们需要确保只有字符串,因此我们使用str()
map()
应用于所有项目
''.join(...)
将列表项合并为一个没有分隔符的字符串。