假设我们有这个数组:arr2 = [2, 3, 1, 2, 2]
我尝试了以下方法:
for i,x in enumerate(arr2):
if x == 2 and x[i+1] == 2:
print('TwosPair')
但收到以下错误:
类型错误:“int”对象不可下标
难道我不应该使用enumerate来检查上一个索引/下一个索引吗?
我还尝试了以下方法:
for i,x in enumerate(arr2):
if x == 2 and x[arr2.index(i)+1] == 2:
print('TwosPair')
但是现在得到这个错误:
ValueError:0不在列表中
0是什么意思
8条答案
按热度按时间qlzsbp2j1#
你有点不清楚,但是如果你想检查前一个索引是否与下一个索引的相对值相同。Zip将允许你遍历两个列表,第一个是原始列表,第二个被切片为一个元素,因为它的第一个元素比原始列表提前一个索引,允许访问原始列表的当前和下一个索引
huwehgph2#
当当前值和下一个值具有相同的值时,您可以使用此函数来查找它们。
oalqel3c3#
这是你想要的吗
mitkmikd4#
它接受任何可迭代的对象,包括生成器和容器(如列表),并报告两个相邻元素是否相等。
gk7wooem5#
可以使用
zip()
:输出:
pcww981p6#
为了回答您的具体问题,它所谈论的0是i在枚举生成器的第一次迭代中获得的0值,然后当它试图通过arr2.index(i)在数组中找到i时,它会抛出错误
jc3wubiy7#
我相信你的方法基本上是合理的--我们只需要稍微调整一下。首先,我们将使用
enumerate()
的第二个参数使其生成的值成为下一个索引。第二,我们将限制数组循环到除了最后一项之外的所有项,这样我们就不会溢出数组索引。最后,我们将使用一些有趣的Python语法来简化测试:vbkedwbf8#
在Python中,这个需求的一个有效实现是使用
itertools.groupby
。