如何优化代码以从列表列表中删除所有列表中的n位置

我在网站上搜索此问题,我发现很多关于从列表列表中删除特定值的帖子.

但是,这不能回答我的问题.

让我们:

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指针,以模仿代码修改原始列表的方式.

点赞