将两个列表组合成字符串

时间:2013-03-29 12:49:54

标签: python string list

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

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 个答案:

答案 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 formattingstr.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)遍历list1list2中的元素对(即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(...)将列表项合并为一个没有分隔符的字符串。