从Python中的未命名列表中删除项目
问题描述:
为什么以下语句在Python中不返回没有'item'
的列表?从Python中的未命名列表中删除项目
list(something_convertible_to_list).remove('item')
?
我想用上面的结构,以避免明确命名列表它传递给函数的唯一目的,即:
operate_on_list(list(something_convertible_to_list).remove('item'))
def operate_on_list(my_list):
# do_something
print my_list
return
这是可能在Python?
答
在python中,内置方法返回None
,使其绝对清除它们突变了一个对象。
当然,你完全可以忽略此约定,写自己的包装:
def my_remove(lst,what):
lst.remove(what)
return lst
但我不会推荐它。
作为一个侧面说明,如果你想要做的事,如:
list(something_convertible_to_list).remove('item')
,但得到的名单后面,下面可能是相似,足以有用:
[x for x in something_iterable if x != 'item']
这是否会返回一个列表,但其中list.remove
只会带走1 'item'
,这会构建一个没有'item'
的新列表。
答
你可以尝试这样的:
my_list[:my_list.index('item')]+my_list[my_list.index('item')+1:]
虽然你们的确有两个搜索在这里。
或
[item for item in my_sequence if item != 'item']
第一个将从列表中删除所述第一'item'
,而第二个将删除每'item'
。
谢谢。这非常有帮助。我认为没有其他可以用于此目的的内置列表(即,我唯一的,简单的替代方法是定义我自己的列表方法)。是对的吗? – 2013-02-19 15:26:57
@ user273158 - 查看我的编辑。 – mgilson 2013-02-19 15:28:21
@Nicolas - 谢谢。正如你所评论的那样,我正在努力。伟大的头脑必须想象:) – mgilson 2013-02-19 15:29:49