在python中创建配对元素列表

Posted

技术标签:

【中文标题】在python中创建配对元素列表【英文标题】:Creating list of paired elements in python 【发布时间】:2020-07-18 01:49:48 【问题描述】:

我想创建一个配对号码列表。例如,我有一个数字列表如下:

a = [1, 4, 7, 10, 13, 16, 19, 21, 24, 27, 30]

我想创建一个这样的配对列表:

paired_list_a = [[1,3],[4,6],[7,9],[10,12],[13,15],[16,18],[19,20],[21,23],[24,26],[27,29]]

也就是说,我想跳过第一个元素,并将数字与它们旁边的数字与减一配对。

我尝试过类似的方法,但没有成功

paired_list_a = [1, 4, 7, 10, 13, 16, 19, 21, 24, 27, 30]
row = [[a[i],a[i+1]-1] for i in range(len(a))]

但它正在抛出IndexError: list index out of range

谁能帮我解决这个问题?

【问题讨论】:

b 的列表是什么? 我很确定你可以通过zip获得更多信息realpython.com/python-zip-function 你需要使用range(len(a)-1),否则a[i+1]不在列表中。 只需使用 zip:[[n, m-1] for n, m in zip(a, a[1:])] 【参考方案1】:

在此处使用 zip 与同一列表的所有值,但没有第一个值:

row = [[x, y - 1] for x, y in zip(a, a[1:])]
print (row)

[[1, 3], [4, 6], [7, 9], [10, 12], [13, 15], [16, 18], [19, 20], [21, 23], [24, 26], [27, 29]]

【讨论】:

您的代码运行良好。太感谢了!您可以更新您的代码,以便我可以获得以下输出吗? [[1, 3], [4, 6], [7, 9], [10, 12], [13, 15], [16, 18], [19, 20], [21, 23], [24, 26], [27, 30]]`` I want the last element of lists to be inclusive, which means I want the last elements to contain [27,30]`. row = [[x, y - 1] if len(a) != i else [x, y] for i, (x, y) in enumerate(zip(a, a[1:]), 2)] 可能会 @user86907 - 建议 - 未来最好在下一个问题中提问;)【参考方案2】:

它超出了范围,因为对于循环的最后一次迭代,您访问的是 a+1 索引。

# change range(len(a)) to range(len(a)-1)
row = [[a[i],a[i+1]-1] for i in range(len(a)-1)]

[[1, 3], [4, 6], [7, 9], [10, 12], [13, 15], [16, 18], [19, 20], [21, 23], [24, 26], [27, 29]]

【讨论】:

【参考方案3】:
res = [] 
for index, item in enumerate(a[:-2]):
    res.append([item, a[index+1]-1])

【讨论】:

【参考方案4】:

那是因为最后一个数字没有后继。您应该尝试以下方法:

row = [[a[i],a[i+1]-1] for i in range(len(a)-1)]

如果您在数字中有一个模式(例如:每个项目都是 last_item + 2),您可以配对没有循环的最后一个值。

row[-1] = [a[-1], a[-1]+2]

【讨论】:

【参考方案5】:

请使用:

range(len(a)-1) 而不是range(len(a)),这是您收到IndexError: list index out of range 错误的主要原因

【讨论】:

以上是关于在python中创建配对元素列表的主要内容,如果未能解决你的问题,请参考以下文章

在python中创建堆栈列表

python 列表多个元素如何配对去重呢?

在 Python 中创建具有初始容量的列表

在布局中创建的列表视图中列出配对的蓝牙设备

如何在python中创建二维列表

如何从数组列表中提取项目并对其进行计数,以便从元素及其总计数(正确)在 Java 中创建映射?