Python在列表中连接元组对

时间:2016-06-20 00:27:05

标签: python mysql list tuples

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

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

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

3 个答案:

答案 0 :(得分:0)

这是一个解决方案。基本上你需要在“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')]

答案 1 :(得分:0)

你可以这样做

  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

答案 2 :(得分:0)

result = [l1[i][1: ] + (l1[i + 1][3], ) for i in xrange(0, len(l1), 2)]