我熟悉WYSIWYG
,它将通过删除传递的元素的第一个实例来使列表发生变异,如果该元素不存在,则会引发值错误。
我要寻找的是一个不会更改列表的函数,而是返回不包含给定元素的列表的副本。因此,例如,与其执行
list.remove
我会执行
l = [1,2,3]
l.remove(2)
这样做的目的是使将这种类型的逻辑放入dict定义中变得更加简单。因此,而不是:
l = [1,2,3].remove(2)
我只有
l = [1,2,3]
l.remove(2)
d = {
'theList': l
}
这样的功能存在吗?
请注意,我只想删除有问题的值的第一个实例,而不是所有实例,因此d = {
'theList': [1,2,3].remove(2)
}
并不能满足我的要求。尽管我不确定是否可以使用列表理解方法。
答案 0 :(得分:4)
list
类型不存在这种方法。
尽管如此,您可以自己编写它,方法是先复制列表,然后删除元素并返回新列表。
def remove(lst, el):
new_lst = lst.copy()
new_lst.remove(el)
return new_lst
>>> l=[1,2,3]
>>> remove(l, 2)
[1, 3]
>>> l
[1, 2, 3]
答案 1 :(得分:3)
您可以使用index
:
a = [1,2,3]
{'a': a[:a.index(2)] + a[a.index(2)+1:]}
或作为功能:
def remove(a, e):
idx = a.index(e)
return a[:idx] + a[idx+1:]
答案 2 :(得分:-2)
你能做
lst = [1, 2, 3]
def remove(l, i):
r = l[:]
r.remove(i)
return r
>>> remove(lst, 2)
[1, 3]
>>> lst
[1, 2, 3]