4

为什么以下语句'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 中可能吗?

4

2 回答 2

9

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

于 2013-02-19T15:24:12.610 回答
1

您可以尝试以下方法:

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-19T15:27:52.677 回答