【问题标题】:How to build a list of tuples from a list of numbers? [duplicate]如何从数字列表中构建元组列表? [复制]
【发布时间】:2018-04-08 18:24:44
【问题描述】:

我有一个由一些数字组成的列表“x”,理想情况下我希望获得一个像“a”这样的列表

x = [12, 37, 64, 159, 205, 225, 239, 252, 257]
a = [(12,37),(37,64),(64,159),(159,205),(205,225),(225,239),(239,252),(252,257)]

我有以下代码,但它似乎没有做正确的事情:

for i in zip(x[::2], x[1::2]):
    print(i)

我得到的结果如下:

(12, 37)
(64, 159)
(205, 225)
(239, 252)

【问题讨论】:

    标签: python list loops


    【解决方案1】:

    您可以通过索引访问每个元素:

    x = [12, 37, 64, 159, 205, 225, 239, 252, 257] 
    new_x = [[x[i], x[i+1]] for i in range(len(x)-1)]
    

    输出:

    [[12, 37], [37, 64], [64, 159], [159, 205], [205, 225], [225, 239], [239, 252], [252, 257]]
    

    但是,基于zip 的解决方案需要简单的列表切片:

    new_x = list(zip(x, x[1:]))
    

    输出:

    [(12, 37), (37, 64), (64, 159), (159, 205), (205, 225), (225, 239), (239, 252), (252, 257)]
    

    【讨论】:

      【解决方案2】:
      x = [12, 37, 64, 159, 205, 225, 239, 252, 257]
      print([i for i in zip(x[::1], x[1::])])
      

      输出:

      [(12, 37), (37, 64), (64, 159), (159, 205), (205, 225), (225, 239), (239, 252), (252, 257)]
      

      在切片时,您需要小心使用步骤编号,因为您使用 2 作为步骤编号,它将始终使用第二个元素作为其位置。 所以改为写x[::2]你应该写x[::1]现在切片的默认步骤是1因此你不需要提及它所以你可以只写x而不是x[::1],接下来你可以写x[1:] 而不是x[1::]

      【讨论】:

        猜你喜欢
        • 2019-01-19
        • 2016-07-12
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 2019-05-19
        • 2012-12-23
        • 2014-06-30
        相关资源
        最近更新 更多