【问题标题】:Creating list of paired elements in python在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:])]

标签: python pandas list dataframe for-loop


【解决方案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 错误的主要原因

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-26
          • 2020-08-26
          • 2016-03-02
          相关资源
          最近更新 更多