如何强制Python在FOR循环中正确识别列表元素索引

时间:2016-04-11 15:30:51

标签: python python-3.x

有一个简单的列表,例如

my_list = ['a', 'b', 'b', 'c', 'c']

我希望使用my_list[1:]循环运行for以获取每次迭代的前一个元素值:

for i in my_list[1:]:
    print(my_list[my_list.index(i)-1])

我希望在输出中看到a b b c,但请改为a a b b。 我想这是因为index()方法仅搜索第一个i ,忽略了有两个元素"b"以及两个"c"的事实} ...

如何修复此代码以获得预期的输出?

5 个答案:

答案 0 :(得分:4)

list.index()方法将返回其参数第一次出现的索引。由于列表中有多个重复项,因此无法获得预期结果。您可以使用简单的切片来获得预期的输出:

>>> my_list = ['a', 'b', 'b', 'c', 'c']
>>> 
>>> my_list[:-1]
['a', 'b', 'b', 'c']

或者,如果您想通过循环访问这些项目,可以使用zip()函数,如下所示:

>>> for i, j in zip(my_list,my_list[1:]):
...     print(i, j)
... 
a b
b b
b c
c c

答案 1 :(得分:2)

将元素与其前任或后继元素匹配是zip的常见用例:

In [13]: for i,prior in zip(my_list[1:], my_list[0:]):
    print (prior)
   ....:     
a
b
b
c

答案 2 :(得分:2)

您可以随时模拟C / Pascal / Perl /的任何内容'而不是Python' for' (实际上更像是foreach)。请注意,范围从1开始,以避免在第一次迭代时返回最后一个元素。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="BlogManagementDiv">
  <button type="button" onclick="fnToggleBox(AddcategoryDiv)">Add </button>
  <div id="AddcategoryDiv" class="BlogManagementcontainer">

  </div>
</div>

不是非常Pythonic,但对于具有其他语言背景的人来说,这种方法有时更直观。

答案 3 :(得分:1)

正如您所注意到的,使用index在这里不起作用,因为它总是找到给定元素的第一个位置。此外,它非常浪费,因为在最糟糕的情况下,您每次都必须搜索整个列表。

您可以使用enumeratestart参数来获取元素及其索引:

start = 1
for i, x in enumerate(my_list[start:], start):
    print(i, x, my_list[i-1]) # index, current, last

答案 4 :(得分:-1)

这样可以解决问题:

for i in range(len(my_list)+1):
    try: print(my_list[i-1])
    except: print 'it is 1st iteration'