【问题标题】:Python concat pairs of tuples in a listPython concat 列表中的元组对
【发布时间】:2016-06-20 00:27:04
【问题描述】:

我有一个如下所示的元组列表:

l1 = [('X', 123, 456, 'a'), ('Y', 123, 456, 'b'), ('X', 123, 456, 'c'), ('Y', 123, 456, 'd')]

对于每个元组,第一项仅在“X”和“Y”之间交替。 索引中的第二项和第三项是常量,第四项是文本值。

我想将列表转换成这种格式:

l1 = [(123, 456, 'a','b'),(123, 456, 'c','d')]

所以对于 X-Y 相邻元组对的文本值,我将它们组合成 1 个元组,同时保持常量。

我这样做是因为我想将我的元组插入到具有这种格式的 MYSQL 表中:

id_1 id_2 X_text Y_text
123   456   a      b
123   456   c      d

如何在成对操作中组合列表中的元组?

【问题讨论】:

  • 这看起来像一个简单的循环。你试过什么吗?
  • 您确实应该向我们展示您的尝试,但在最近查看了一些 zip 问题后,它激起了我的兴趣。

标签: python mysql list tuples


【解决方案1】:
result = [l1[i][1: ] + (l1[i + 1][3], ) for i in xrange(0, len(l1), 2)]

【讨论】:

    【解决方案2】:

    这里有一个解决方案。本质上,您需要在“twos”中逐步遍历列表,然后重新组合新列表。

    l1 = [('X', 123, 456, 'a'), ('Y', 123, 456, 'b'), ('X', 123, 456, 'c'), ('Y', 123, 456, 'd')]
    l2 = []
    
    for i in range(0, len(l1), 2):
        x = l1[i]
        y = l1[i+1]
        assert x[0] == 'X'
        assert y[0] == 'Y'
        assert x[1] == y[1]
        assert x[2] == y[2]
        l2.append((x[1], x[2], x[3], y[3]))
    
    print l2
    

    请注意使用断言来断言您的假设!

    输出:

    [(123, 456, 'a', 'b'), (123, 456, 'c', 'd')]
    

    【讨论】:

      【解决方案3】:

      你可以这样做

        l1 = [('X', 123, 456, 'a'),
              ('Y', 123, 456, 'b'), 
              ('X', 123, 456, 'c'), 
              ('Y', 123, 456, 'd')]
        l1 =  tuple((x[1],x[2],x[3],l1[i+1][3]) for x,i in zip(l1,range(0,len(l1)-1)))
        l2 = (l1[0],l1[2]) #resulting tuple
      
        print l2
      

      【讨论】:

        猜你喜欢
        • 2018-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 2016-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多