![](/img/trans.png)
[英]One liner function for sorting a string list of lists in ascending, descending order based on varying criteria in python
[英]One liner for poping list of lists based on condition
我有以下列表:
leftoverbricks = [['purple1', 'y8', 'x0', 'y8', 'x1'], ['purple2', 'y6', 'y0', 'x8', 'y0'], ['purple3', 'z2', 'x8', 'z2', 'x0']]
和
startingbrick = ['purple3', 'z2', 1, 1]
我想從 leftoverbricks 中彈出一個元素,其中startingbrick[0]
與來自 leftoverbricks 的列表列表的第一個元素匹配,所以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']]
但這並不優雅。 我希望這樣的事情可以用一個襯墊並通過改變原始的reducedleftoverbricks
leftoverbricks
我在一個班輪列表理解上做了幾次嘗試,但到目前為止都失敗了。
就個人而言,我會考慮使用過濾器。 請注意,過濾器將被延遲評估,因此您可以在您想要減少列表的地方評估整個過濾器。
for brick in filter(lambda n: n[0] != startingbrick[0], leftoverbricks):
do_more_work(brick)
這將是filter()的一個很好的用例。
例如,
leftoverbricks = [['purple1', 'y8', 'x0', 'y8', 'x1'], ['purple2', 'y6', 'y0', 'x8', 'y0'], ['purple3', 'z2', 'x8', 'z2', 'x0']]
startingbrick = ['purple3', 'z2', 1, 1]
def removebrick(tempbrick, templist):
key, *_ = templist
return list(filter(lambda v: v[0] != key, tempbrick))
print(removebrick(leftoverbricks, startingbrick))
輸出:
[['purple1', 'y8', 'x0', 'y8', 'x1'], ['purple2', 'y6', 'y0', 'x8', 'y0']]
筆記:
這不會修改輸入列表 (leftoverbricks)。 如果您希望它具有破壞性,則只需將此函數的返回值分配給適當的變量
您可以使用列表理解從leftoverbricks
中刪除與startingbrick
的第一個元素匹配的元素。
例子:
leftoverbricks = [['purple1', 'y8', 'x0', 'y8', 'x1'], ['purple2', 'y6', 'y0', 'x8', 'y0'], ['purple3', 'z2', 'x8', 'z2', 'x0']]
startingbrick = ['purple3', 'z2', 1, 1]
leftoverbricks = [brick for brick in leftoverbricks if brick[0] != startingbrick[0]]
print(leftoverbricks)
這將修改leftoverbricks
到位,因此您不需要創建新的列表變量。
輸出:
[['purple1', 'y8', 'x0', 'y8', 'x1'], ['purple2', 'y6', 'y0', 'x8', 'y0']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.