如果值是sam,则返回相同的索引

2024-10-03 09:07:12 发布

您现在位置:Python中文网/ 问答频道 /正文

就我的目的而言,这很好,只是当值(在本例中为20)相同时,它将只从前面返回索引。代码如下所示,我不确定解决方法是什么,但我需要它返回值的索引。我有一些浮动,将有所不同,但似乎更难以处理

lmt_lst = [-1, 5, 9, 20, 44, 37, 22, 20, 17, 12, 6, 1, -6]

lft_lmt = next(x for x in lmt_lst if x >=20)
rgt_lmt = next(x for x in reversed(lmt_lst) if x >= 20)

lft_idx = lmt_lst.index(lft_lmt)
rgt_lmt = lmt_lst.index(rgt_lmt)

print('Left Limit:', lft_lmt, 'Left Index:', lft_idx)
print('Right Limit:', rgt_lmt, 'Right Index:', rgt_idx)

如果您将“20”的值中的任何一个更改为21,则效果很好

它不返回任何错误,只返回值的第一个索引,不管是否反转


Tags: inforindexifleftnextlimitprint
1条回答
网友
1楼 · 发布于 2024-10-03 09:07:12

您的lft_lmtrgt_lmt列表只包含大于或等于20的值,因此您的列表分别是[20, 44, 37, 22, 20][20, 22, 37, 44, 20]

>>> lmt_lst = [-1, 5, 9, 20, 44, 37, 22, 20, 17, 12, 6, 1, -6]
>>> [x for x in lmt_lst if x >=20]
[20, 44, 37, 22, 20]
>>> [x for x in reversed(lmt_lst) if x >= 20]
[20, 22, 37, 44, 20]

这两个列表的第一项都是20,因此当您在初始列表中搜索它们时(使用.index从列表的开始进行搜索),您将得到3次(因为无论您从开始到结束搜索列表多少次,都会在位置3处找到20次)

要找到正确的索引,您需要搜索反向列表,并将结果视为向后搜索列表:

>>> lft_idx = lmt_lst.index(lft_lmt)
>>> lft_idx
3
>>> rgt_idx = len(lmt_lst) - 1 - lmt_lst[::-1].index(rgt_lmt)
>>> rgt_idx
7

相关问题 更多 >