2013-10-05 112 views
0

我的目標是讓一個列表的重複項將另一個列表的元素根據其相應的索引值組合在一起,並刪除第一個列表的重複項,以便仍然存在這兩個列表的索引數量相同。有一個列表根據索引值合併來自另一個列表的元素

這是我想改變列表的開始:

X = ['0', '1', '0', '1', '0', '1', '0'] 
Y = ['a', 'm', 'z', 'G', 'h', 'w', '22'] 

這是我在尋找的結果:

X = [0,1] 
Y = ['azh22', 'mGw'] 

順序也無所謂聯合項目在第二個列表(列表Y),只要他們根據列表X中的項目分組在一起。

我仍然是編程的noobie,這一個讓我難住。 謝謝!

+1

我認爲它應該是'X = ['0','1']'-Python不會自動將字符串轉換爲整數。 –

回答

5

您可以使用defaultdict

>>> from collections import defaultdict 
>>> d = defaultdict(str) 
>>> for i, j in zip(X, Y): 
...  d[i] += j 
... 
>>> print d 
defaultdict(<type 'str'>, {'1': 'mGw', '0': 'azh22'}) 
>>> print d.items() 
[('1', 'mGw'), ('0', 'azh22')] 
>>> X = d.keys() 
>>> Y = d.values() 
>>> print X 
['1', '0'] 
>>> print Y 
['mGw', 'azh22'] 
+0

這正是我需要的!謝謝! – Uck

+0

@Uck沒問題:)。不要忘記[接受一個答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work):) – TerryA

1

郵編兩個列表一起:

In [15]: zip(X, Y) 
Out[15]: 
[('0', 'a'), 
('1', 'm'), 
('0', 'z'), 
('1', 'G'), 
('0', 'h'), 
('1', 'w'), 
('0', '22')] 

,把它變成一本字典:

from collections import defaultdict 

d = defaultdict(str) 

for key, value in zip(X, Y): 
    d[key] += value # If the key doesn't exist, it'll default to an empty string 

現在你有你產生字典,我認爲這會比兩個列表更容易使用:

{'1': 'mGw', '0': 'azh22'} 
+0

如果他想要兩個列表,'X ,如果你需要'['0','1'],Y = d.keys(),d.values()'(或'X,Y = zip(* sorted(d.items()))問題中指定的順序)將很容易地得到它們。 – abarnert

相關問題