【问题标题】:Python multiple list comprehensions containing ranges of tuples in one listPython 多个列表推导,包含一个列表中的元组范围
【发布时间】:2012-02-22 12:39:55
【问题描述】:

我需要这样的清单:

[(16,2), (14,3), (15,3), (16,3), (18,3), (19,3), (12,4), (13,4), (14,4)]

但是要长得多。此列表中有某些非常大范围的模式,但也有不规则性。所以写下所有个元组是不可行的,但我也不能做一个简单的listcomp。

我想用:

[(16,2), (x,3) for x in range(14,19), (x,4) for x in range(12,14)] 

但根据文档,[x, y for ...] 是不允许的,我的示例被解释为 2 个带括号的元组的无括号元组,而不是一个元组后跟一个列表理解。

有什么解决办法吗?

【问题讨论】:

    标签: python list tuples list-comprehension


    【解决方案1】:

    试试这个:

    [(16, 2)] + [(x,3) for x in range(14,19)] + [(x,4) for x in range(12,14)]
    

    【讨论】:

    • 谢谢,就像一个魅力!这些列表就像像素坐标,其中一些列表形成了一个像素化的菱形,在 y=2 上有 16 个,扩大了 2 个像素,直到 y=12,它又变小了。有什么方法可以让它更简洁?
    【解决方案2】:

    您的问题不清楚您是否要在每个新范围内增加第二个索引。

    如果是这种情况,您可以将所有范围放在一个列表中并使用itertools.count()

    from itertools import count
    indexes = [(16,17), (14, 20), (12, 15)]
    
    [(x, n) for i,n in zip(indexes,count(2)) for x in range(*i)]
    

    确切给出:

    [(16, 2), (14, 3), (15, 3), (16, 3), (17, 3), (18, 3), (19, 3), (12, 4), (13, 4), (14, 4)]
    

    【讨论】:

      【解决方案3】:

      您可以创建单独的列表,然后将它们相互附加。

      a = [(16, 2)]
      b = [(x, 3) for x in range(14, 19)]
      c = [(x, 4) for x in range(12, 15)]
      a.extend(b)
      a.extend(c)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        • 2016-12-14
        • 1970-01-01
        相关资源
        最近更新 更多