给出一个整数列表,例如:
lst = [3,3,6,5,8,3,4,5]
然后,我使用列表推导来找出数字3在该列表中出现在哪个索引上:
[i for i, x in enumerate(lst) if x == 3]
但是现在我不知道如何确定数字3是否紧挨着另一个3,然后将其返回为True
答案 0 :(得分:3)
您可以使用zip()来成对循环遍历数据:
any(a == b == 3 for a, b in zip(lst, lst[1:]))
链接比较然后检查 a 和 b 是否都等于 3 。函数any()检查是否所有更改的比较都是正确的。
FWIW,另一种循环 pairwise()的方法在文档的itertools recipes部分中显示。
希望这会有所帮助:-)
答案 1 :(得分:0)
但是现在我不知道如何确定数字3是否紧挨着另一个3,然后将其返回为True
好吧,因为您的结果是一个可以找到3的所有索引的列表,所以您只需检查任意两个连续的索引,看看它们是否相差仅1。
可悲的是,“窗口式”迭代器仍不属于标准库,但是复制它们很容易:
indices = [3,3,6,5,8,3,4,5]
for i, j in zip(indices, indices[1:]):
...
答案 2 :(得分:0)
这是另一种非常简单的方法(有点复杂)
def check(index, lst):
if index > 0 and lst[index] == lst[index - 1] and lst[index] == 3:
return True
if index < len(lst) and lst[index] == lst[index + 1] and lst[index] == 3:
return True
return False
lst = [3,3,6,5,8,3,4,5]
for index in range(len(lst)):
print(check(index, lst))
输出:
True
True
False
False
False
False
False