在python中创建成对元素的列表

在python中创建成对元素的列表,python,pandas,list,dataframe,for-loop,Python,Pandas,List,Dataframe,For Loop,我想创建一个配对号码的列表。例如,我有一个数字列表,如下所示: 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 =

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

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))]
但它将索引器:列表索引超出范围


有人能帮我吗?

使用
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]]

它超出了范围,因为在循环的最后一次迭代中,您访问了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]]

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

row = [[a[i],a[i+1]-1] for i in range(len(a)-1)]
如果数字中有一个模式(例如:每个项目都是last_item+2),则可以在不使用循环的情况下将最后一个值配对

row[-1] = [a[-1], a[-1]+2]
请使用:


range(len(a)-1)
而不是
range(len(a))
这是您获得
indexer的主要原因:列表索引超出范围
error

列表
b
的目的是什么?我非常肯定您可以通过
zip
获得更多信息,您需要使用
range(len(a)-1)
,否则
a[I+1]
在列表之外。只需使用zip:
[[n,m-1]表示n,m在zip中(a,a[1:])]
您的代码工作正常。非常感谢你!你能更新你的代码以便我能得到以下输出吗<代码>[[1,3]、[4,6]、[7,9]、[10,12]、[13,15]、[16,18]、[19,20]、[21,23]、[24,26]、[27,30]``我希望列表的最后一个元素是包含的,这意味着我希望最后一个元素包含[27,30]`。但如果len(a)!=I else[x,y]代表枚举中的I,(x,y)(zip(a,a[1],2)]@user86907-建议-未来最好在下一个问题中提问;)
row[-1] = [a[-1], a[-1]+2]