我在网站上搜索此问题,我发现很多关于从列表列表中删除特定值的帖子.
但是,这不能回答我的问题.
让我们:
mylist=[[1,2,3,4],[100,374,283,738]]
现在,在我看来,两个列表是相互关联的.列出1个数字项目:1,2,3,4,…和列表2这些项目的功能(例如价格:100美元,374美元等).
现在,我想从列表中删除元素(数量和价格),如果list2高于某个值(例如,如果一个项目太贵,超过300美元)
我一直在尝试,我得到了这个:
n=0 # counter for position in the list
for i in mylist[1]:
if i>300:
for j in mylist:
del j[n]
n=n+1
结果:
[[1,3],[100,283]]
这实际上有效.它看起来效率不高:我必须多次访问列表,我必须创建新的变量.循环太多了.
由于列表可以使用理解列表,我很想知道是否有更高效和优雅的方法获得相同的结果
谢谢
最佳答案 使用带过滤生成器表达式的zip:
>>> mylist = [[1,2,3,4], [100,374,283,738]]
>>> mylist[:] = list(map(list, zip(*((a,b) for a,b in zip(*mylist) if b<300))))
>>> mylist
[[1, 3], [100, 283]]
请注意,这会保留旧的mylist指针,以模仿代码修改原始列表的方式.