繁体   English   中英

从列表中删除当前元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM