在Python中创建列表
当我执行以下的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 个回答
1
xs.index(x)
这个方法可以帮你找到 x
在 xs
这个列表中第一次出现的位置,也就是它的索引。所以当你遇到第二个 1
时,.index
只会告诉你第一个 1
的位置。
如果你想同时得到索引和对应的值,可以用 enumerate
:比如 for i, number in enumerate(numbers): print number, numbers[i+2]
这样写。
注意,我故意没有用 list
这个名字,因为它是一个内置的名称,不应该被覆盖。此外,(..., ...)
是一个 元组(也就是不能改变的),而列表是用方括号 [..., ...]
定义的,可以改变。
1
你的列表里有重复的项,所以用索引查找时总是返回第一个找到的索引。
可以用 for index in range(len(list) - 1)
来开始你的程序。
3
list.index这个方法会返回列表中某个值第一次出现的位置。所以如果你用[1,1,1].index(1),结果总是0,因为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)