两个列表合并成字符串

问题描述:

其实我想两个清单合并成一个字符串,但让他们有序的意思是:两个列表合并成字符串

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 
+0

这是一个[generator表达式](http://www.youtube.com/watch?v=pShL9DCSIUw),与['str.join()']一起使用(http://docs.python.org/3.3 /library/stdtypes.html#str.join)。 –

+0

使它成为一个列表理解,它会更快。通过给予'。因为'.join()'需要扫描输入两次,一次计算输出的总长度,一次产生输出,因此Python必须从它创建一个列表。 '[list comprehension]'比'list(generator expression)'快。 –

+0

@MartijnPieters真实但简单可能更重要 – jamylak

>>> ''.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(...)将结果合并到单个字符串中。

>>> 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()所有项目。
+0

我认为这是最灵活的pythonic答案。这里的优点是可以愉快地向'zip()'添加更多的迭代器,并且它可以很好地工作,其他答案都将需要改变,这取决于迭代次数。 –

+1

@Lattyware灵活,是的,但对于这种特殊情况绝对是矫枉过正 – jamylak

+2

@Lattyware:对于我来说,Ashwini的答案是最pythonic - “简单胜于复杂”,你知道。 – georg

使用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()加入整个生成器表达式。

+0

或者只是格式(* p)在p中......' – georg

+0

@ thg435这样更清晰 – jamylak

+0

@jamylak:我不是一个很大的格式风扇,所以我亲自使用'“%d%s”%p为p ...'。 – georg