在python中制作列表

时间:2011-02-05 21:45:54

标签: python list

当我执行以下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)]

5 个答案:

答案 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)为您提供xxs第一次出现的索引。因此,当您到达第二个1时,.index会为您提供第一个1的索引。

如果您需要索引旁边的值,请使用enumeratefor 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)]

推荐阅读:

http://docs.python.org/tutorial/datastructures.html

http://docs.python.org/howto/functional.html