2013-03-29 118 views
7

其實我想兩個清單合併成一個字符串,但讓他們有序的意思是:兩個列表合併成字符串

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的方式,但我不知道它實際上。

可能有人可以幫我解決這個問題。

回答

10
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

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(...)將結果合併到單個字符串中。
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'] 
    
  • 現在,我們需要確保只有字符串,所以我們用map()

  • 最終''.join(...)合併列表項組合成一個字符串沒有分隔適用str()所有項目。
+0

我認爲這是最靈活的pythonic答案。這裏的優點是可以愉快地向'zip()'添加更多的迭代器,並且它可以很好地工作,其他答案都將需要改變,這取決於迭代次數。 –

+1

@Lattyware靈活,是的,但對於這種特殊情況絕對是矯枉過正 – jamylak

+2

@Lattyware:對於我來說,Ashwini的答案是最pythonic - 「簡單勝於複雜」,你知道。 – georg

2

使用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