12

实际上,我正在尝试将两个列表合并为一个字符串,但保持它们有序的含义:

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 的方式来做到这一点,但我实际上并不知道。

愿你们中的某个人可以帮助我解决这个问题。

4

4 回答 4

22
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
于 2013-03-29T12:52:15.833 回答
4
>>> 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(...)将列表项合并为一个没有分隔符的字符串。
于 2013-03-29T12:52:43.133 回答
4

使用字符串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().

于 2013-03-29T12:55:56.617 回答
2
>>> ''.join(str(n)+s for (n,s) in zip(list1, list2))
'1one2two3three4four5five'

这里:

  • for (n,s) in zip(list1, list2)迭代list1list2(即1"one")中的元素对;
  • str(n)+s将每一对转换为字符串(例如"1one");
  • ''.join(...)将结果合并为一个字符串。
于 2013-03-29T12:52:18.420 回答