使用enumerate从python列表中获取值



我有这个列表

item = [
[1, 2, 'W', 4, 5],
[16, 17, 'W', 19, 20],
[],
[],
[],
['1', '', 'D', '3120', '3456']
]

我需要得到每个有值的元素的位置2

我在

v_sal = [x for x, sal in enumerate(item) if sal]
x = [i for i in item if i]
for i in range(0,len(x)):
for pos, val in enumerate(x[i]):
v2=pos[2]

我需要在变量中为每个数组分配位置2但是我有这个错误

TypeError: 'int' object is not subscriptable

我假设这是您对位置2的期望输出。第二个位置的含义,即Python中list的索引1:

[2, 17, '']

我完全不明白为什么这里需要enumerate()

这是解决这个问题的方法。

result = []
for element in item:
try:
result.append(element[1])
except IndexError:
pass
print(result)

不必显式检查元素中是否有值。只捕获异常。

您可以使用itertools库,或more-itertools,当您使用可迭代对象时,这是非常有用的。

from itertools import islice
item = [
[1, 2, 'W', 4, 5],
[16, 17, 'W', 19, 20],
[],
[],
[],
['1', '', 'D', '3120', '3456']
]
# https://more-itertools.readthedocs.io/en/stable/_modules/more_itertools/recipes.html#nth
def nth(iterable, n, default=None):
"""Returns the nth item or a default value.
>>> l = range(10)
>>> nth(l, 3)
3
>>> nth(l, 20, "zebra")
'zebra'
"""
return next(islice(iterable, n, None), default)

if __name__ == "__main__":
f1 = [nth(l, 1) for l in item]
f2 = [snds for l in item if (snds:=nth(l, 1)) is not None]  # Walrus operator is available > 3.8
print(f1)
# [2, 17, None, None, None, '']
print(f2)
# [2, 17, '']

看,https://more-itertools.readthedocs.io/en/stable/_modules/more_itertools/recipes.html n

相关内容

  • 没有找到相关文章