在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中创建配对元素列表的主要内容,如果未能解决你的问题,请参考以下文章