我在x = [[1,2],[3,4],[5,'inf'],[6,7],['nan',10]]
中有以下列表:
'inf'
如何返回包含'nan'
或if (float('inf') in i) or (float('nan') in i)
的商品的索引?
修改-1
我想到的第一件事就是制作一个if语句,如下所示:
$filtered = $toFilter |? { $item = $_; ($filters |? { $item -match $_ }).Count -gt 0 }
但是,我不知道如何返回索引值。
修改-2
被标记为重复的问题实际上并没有回答我的问题。
感谢。
答案 0 :(得分:2)
您可以遍历列表并检查nan
或inf
:
x = [[1,2],[3,4],[5,'inf'],[6,7],['nan',10]]
for y in x:
if 'inf' in y:
print(x.index(y),y.index('inf'))
elif 'nan' in y:
print(x.index(y), y.index('nan'))
结果将是:
2 1
4 0
答案 1 :(得分:2)
我很高兴你加入了尝试!我们SO用户喜欢当人们在提问之前展示他们的工作。它表明您真正关心的是您尝试解决的问题,而不仅仅是免费工作服务。
话虽如此,我喜欢这里列表理解的简单性:
>>> [(i, j) for i, seq in enumerate(x) for j, item in enumerate(seq) if item == 'inf' or item == 'nan']
[(2, 1), (4, 0)]
上述更简洁的版本利用集合及其高性能成员资格检查:
>>> [(i, j) for i, seq in enumerate(x) for j, item in enumerate(seq) if item in {'inf', 'nan'}]
我们在这里做的是(1)以嵌套顺序遍历嵌套列表,(2)检查我们的项目是否符合您布置的条件,(3)通过enumerate()
电话的结果捕获该位置的索引。
推荐读物:
答案 2 :(得分:0)
[(i, j) for i, outer in enumerate(x) for j, inner in enumerate(outer ) if inner in ['inf','nan']]