[英]Removing current element from a list
我有这个清单。 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
任何帮助将不胜感激。
您的代码似乎在删除tmp_keys
之前正在打印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']
您显然在删除列表之前先将其打印出来。 删除后要打印。 另外,您应该复制列表,而不要使用=
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
Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。 对于可变或包含可变项的集合,有时需要一个副本,因此一个副本可以更改一个副本而不更改另一个副本。
由于list没有copy(),因此需要另一种方法来防止对tmp_keys的更改也影响键
举个例子
keys = ['a', 'b', 'c', 'd', 'e']
tmp_keys = keys
del tmp_keys(3)
print keys
输出:Abce
tmp_keys = keys[:]
print tmp_keys
print keys
OUTPUT:
a b c e
a b c d e
使用filter命令:
filter( lambda x: x!='Messi', ['Messi', 'Neymar', 'Xavi', 'Iniesta'])
['Neymar', 'Xavi', 'Iniesta']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.