有一个简单的列表,例如
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"
的事实} ...
如何修复此代码以获得预期的输出?
答案 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
在这里不起作用,因为它总是找到给定元素的第一个位置。此外,它非常浪费,因为在最糟糕的情况下,您每次都必须搜索整个列表。
您可以使用enumerate
和start
参数来获取元素及其索引:
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'