为什么以下语句在Python中没有返回没有'item'
的列表?
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中是否可行?
答案 0 :(得分: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'
。
答案 1 :(得分: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'
。