我有以下清单:
第一个月
以及startingbrick = ['purple3', 'z2', 1, 1]
我想从leftverbricks中取出一个元素,其中startingbrick[0]
匹配leftverbricks中list的第一个元素,所以leftoverbricks[][0]
我创建了一个函数:
def removebrick(tempbrick, templist):
reducedlist = templist
for tempelement in reducedlist:
if tempelement[0] == tempbrick[0]:
reducedlist.pop(reducedlist.index(tempelement))
return reducedlist
并且其给出正确的结果:reducedleftoverbricks = removebrick(startingbrick, leftoverbricks)
reducedleftoverbricks = [['purple1', 'y8', 'x0', 'y8', 'x1'], ['purple2', 'y6', 'y0', 'x8', 'y0']]
但这并不优雅。我希望这样的事情可以用一个liner来完成,并通过改变原始的leftoverbricks
列表,而不是创建一个新的列表变量reducedleftoverbricks
。我做了一些尝试,在一个liner列表理解,但到目前为止失败。
3条答案
按热度按时间igetnqfo1#
可以使用列表解析从
leftoverbricks
中删除与startingbrick
的第一个元素匹配的元素。示例:
这将在适当的位置修改
leftoverbricks
,因此您不需要创建新的列表变量。eit6fx6z2#
就我个人而言,我会考虑使用一个过滤器,注意过滤器将被延迟求值,所以你可以在你想要缩减列表的地方求值整个过滤器。
w1e3prcc3#
对于 * filter()* 来说,这是一个很好的用例。
例如,
这并不修改输入列表(leftverbricks),如果你希望它是破坏性的,那么只要把这个函数的返回值赋给适当的变量