在Python中创建列表

0 投票
5 回答
824 浏览
提问于 2025-04-16 11:18

当我执行以下的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) 这个方法可以帮你找到 xxs 这个列表中第一次出现的位置,也就是它的索引。所以当你遇到第二个 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)

撰写回答