2014-02-24 175 views
1

我有這個列表。 keys = ['Messi','Neymar','Xavi','Iniesta']我想遍歷列表以從列表中刪除當前元素。對於上面的列表,我想有類似的東西從列表中刪除當前元素

Messi is out 
['Neymar', 'Xavi', 'Iniesta'] 
Neymar is out 
['Messi', 'Xavi', 'Iniesta'] 
Xavi is out 
['Messi', 'Neymar', 'Iniesta'] 
Iniesta is out 
['Messi', 'Neymar', 'Xavi'] 

這是我到目前爲止的代碼。它似乎並沒有工作

keys = ['Messi', 'Neymar', 'Xavi', 'Iniesta'] 
tmp_keys = keys 
length = len(keys) 
for player in keys: 
    if player in tmp_keys: 
     print player + " is out" 
     print tmp_keys 
     tmp_keys.remove(player) 
     tmp_keys = keys 

任何幫助將不勝感激。

+0

目前還不清楚你想做什麼,但是每當你從tmp_keys中移除一個播放器時,下一行就會重新分配tmp_keys,因此它總是和key有相同的元素。 – Hotpepper

回答

1

您的代碼似乎是打印tmp_keys刪除的項目之前。我認爲,如果你轉換這些陳述的話,它會起作用。

一種更好的方式來複制列表可能僅僅是:

tmp_keys = list(keys) 

的話說tmp_keys = keys只是把tmp_keys另一個標記爲相同的列表爲keys

例如:

>>> a = [1,2,3] 
>>> b = a 

>>> print a  
[1,2,3] 

>>> print b 
[1,2,3] 

>>> b.append(4) 

>>> print a 
[1,2,3,4] 

>>> print b 
[1,2,3,4] 

你也可以這樣做:

from itertools import combinations 

keys = ['Messi', 'Neymar', 'Xavi', 'Iniesta'] 

c = combinations(keys, 3) 

>>> for i in c: 
...  print i 
('Messi', 'Neymar', 'Xavi') 
('Messi', 'Neymar', 'Iniesta') 
('Messi', 'Xavi', 'Iniesta') 
('Neymar', 'Xavi', 'Iniesta') 

for comb in c: 
    for name in keys: 
    if name not in comb: 
     print "{0} is out".format(name) 
     print list(comb) # without list() you will just get tuples 

輸出:

Iniesta is out 
['Messi', 'Neymar', 'Xavi'] 
Xavi is out 
['Messi', 'Neymar', 'Iniesta'] 
Neymar is out 
['Messi', 'Xavi', 'Iniesta'] 
Messi is out 
['Neymar', 'Xavi', 'Iniesta'] 
+0

它像一個魅力。謝謝! – user3078335

-1

filter命令:

filter(lambda x: x!='Messi', ['Messi', 'Neymar', 'Xavi', 'Iniesta']) 
['Neymar', 'Xavi', 'Iniesta'] 
0

你顯然打印清單,你刪除它之前。您想在刪除它後打印它。你也應該複製的列表,而不是使用=在Python

keys = ['Messi', 'Neymar', 'Xavi', 'Iniesta'] 
tmp_keys = keys[:] 
length = len(keys) 
for player in keys: 
    if player in tmp_keys: 
    print player + " is out" 
    tmp_keys.remove(player) 
    print tmp_keys 
    tmp_keys = keys[:] 

http://docs.python.org/2/library/copy.html

賦值語句不復制的對象,他們創造的目標和對象之間的綁定。對於可變項目或包含可變項目的集合,有時需要副本,以便可以更改一個副本而不更改其他副本。

由於列表中不具有複製(),需​​要不同的方法,以防止從也影響鍵tmp_keys變化

作爲一個例子

keys = ['a', 'b', 'c', 'd', 'e'] 
tmp_keys = keys 

del tmp_keys(3) 
print keys 

OUTPUT:ABCE

tmp_keys = keys[:] 
print tmp_keys 
print keys 

OUTPUT:

a b c e 
a b c d e 
+0

@Totem謝謝我修復了這個參考 – sabbahillel