假设我有一个列表
List = ['bob', 'john', 'mary', 'jill']
我想将列表传递给一个函数,但我不希望john成为传递的列表的一部分。我不想永久删除它,只是在传递时排除它。
这可能吗?我看到的所有pop/remove的例子都把它从列表中删除了。我知道我可以复制并删除它,但我想我应该问一下python中是否已经存在这样的东西。
您不能"暂时";删除一些东西,并期望它会自动恢复。只有两种可能:删除后再放回去,或者创建一个重复的数据结构。
除非顺序很重要,否则我可能会从list
构造一个frozenset
,然后在没有所需元素的情况下创建一个新的frozenset
,特别是如果您将在循环中这样做:
full_list = ['bob', 'john', 'mary', 'jill']
full_set = frozenset(List)
no_john_set = full_set - {'john'} # frozenset({'bob', 'mary', 'jill'})
正如larsks在评论中提到的,您可以将新列表传递给您希望调用的函数,而无需更改原始列表:
lst = ['bob', 'john', 'mary', 'jill']
def x(lstp):
for i in lstp:
print(i)
x([name for name in lst if name != 'john'])
上面的代码将打印:
bob
mary
jill
,排除'john'
。
上面的程序创建了一个新列表,作为参数传递给myfunc
,然后迭代lst
,如果语句if name != 'john'
的计算结果为True,则将其中的每一项添加到新列表中,当然,只有当列表中的项不是'john'
时才会发生这种情况。