从lis中删除当前元素

2024-09-29 21:36:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个单子。keys=['mesi'、'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

任何帮助都将不胜感激。你知道吗


Tags: in元素列表iskeysouttmp单子
3条回答

显然,您在删除列表之前先打印列表。您想在删除后打印它。您还应该复制列表,而不是使用=

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\u键的更改也影响键

举个例子

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

del tmp_keys(3)
print keys

输出:a b c e

tmp_keys = keys[:]
print tmp_keys
print keys

输出:

a b c e
a b c d e

在删除项目之前,您的代码似乎正在打印。我想如果你把这些话换个说法会管用的。你知道吗

复制列表的更好方法可能是:

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']

使用filter命令:

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

相关问题 更多 >

    热门问题