当我执行以下python脚本
时list= (1,2,3,4,1,2,7,8)
for number in list:
item1= number
item2= list[list.index(item1)+2]
couple= item1, item2
print couple
目标是将每个号码与第二个号码相关联 我得到了这个结果
(1, 3)
(2, 4)
(3, 1)
(4, 2)
(1, 3)
(2, 4)
(然后索引超出范围,但这不是问题)
我的问题是为什么第五行中的数字1仍然与数字3耦合,我怎么能使它与数字7耦合;第六行中数字2的同义词,应该与数字8相连。
其他问题 如果我只想列出以1开头的夫妇名单,我该怎么办:[(1,3),(1,7)]
答案 0 :(得分:3)
list.index返回列表中值第一次出现的偏移量 - 因此,如果你执行[1,1,1] .index(1),答案将始终为0 ,即使1和2也是有效的答案。
相反,请尝试:
from itertools import islice, izip, ifilter
mylist = [1,2,3,4,1,2,7,8]
for pair in ifilter(lambda x: x[0]==1, izip(mylist, islice(mylist, 2, None))):
print pair
结果
(1, 3)
(1, 7)
答案 1 :(得分:1)
xs.index(x)
为您提供x
中xs
第一次出现的索引。因此,当您到达第二个1
时,.index
会为您提供第一个1
的索引。
如果您需要索引旁边的值,请使用enumerate
:for i, number in enumerate(numbers): print number, numbers[i+2]
。
请注意,我故意不使用名称list
。这是内置的名称,你不应该覆盖它。另请注意,(..., ...)
是元组(因此无法更改),而不是列表(在方括号[..., ...]
中定义并且可以更改)。< / p>
答案 2 :(得分:1)
您在列表中有重复项,因此索引始终返回第一个索引。
使用for index in range(len(list) - 1)
答案 3 :(得分:0)
您正在使用.index
返回第一次出现的number
。
考虑:
for number in range(len(list)):
item1= list[number]
item2= list[number+2]
couple= item1, item2
print couple
答案 4 :(得分:0)
>>> zip(lst, lst[2:])
[(1, 3), (2, 4), (3, 1), (4, 2), (1, 7), (2, 8)]
只获得对(1,X):
>>> [(a, b) for (a, b) in zip(lst, lst[2:]) if a == 1]
[(1, 3), (1, 7)]
推荐阅读: