如何从列表中得到第n个元素,其中list[i][0] == 'value'

目前我做了这两个步骤:

items = [['value', 0], ['foo', 1], ['value', 2], ['value', 3], ['bar', 4]]
n = 2

tmp_list = []
for item in items:
    if item[0] == 'value':
        tmp_list.append(item)

i = 0
while i < n:
    print(tmp_list[i])
    i += 1

本例中的预期结果为['value', 0]['value', 2].

它工作,但它看起来不太整洁.我有一种唠叨的感觉,它可以做得更好,我只是找不到解决办法.

推荐答案

第一个改进是第一步使用列表理解,第二步使用切片:

tmp_list = [item for item in items if item[0] == 'value']

for val in tmp_list[:n]:
    print(val)

然后,您可以将其更改为具有延迟计算的生成器.这是否是一种进步是值得商榷的,这取决于你打算用这些价值观做什么.

from itertools import islice

values = islice((item for item in items if item[0] == 'value'), n)

for val in values:
    print(val)

Python相关问答推荐

Odoo 14 hr. emergency.public内的二进制字段

将整组数组拆分为最小值与最大值之和的子数组

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

Python上的Instagram API:缺少client_id参数"

从收件箱中的列中删除html格式

按列分区,按另一列排序

如何从.cgi网站刮一张表到rame?

删除字符串中第一次出现单词后的所有内容

Stacked bar chart from billrame

如何让这个星型模式在Python中只使用一个for循环?

Pandas DataFrame中行之间的差异

当递归函数的返回值未绑定到变量时,非局部变量不更新:

计算分布的标准差

从嵌套的yaml创建一个嵌套字符串,后面跟着点

为什么\b在这个正则表达式中不解释为反斜杠

为什么Python内存中的列表大小与文档不匹配?

判断Python操作:如何从字面上得到所有decorator ?

使用类型提示进行类型转换

如何将泛型类类型与函数返回类型结合使用?

Python如何导入类的实例