我有一个如下所示的元组列表:
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
如何在成对操作中组合列表中的元组?
答案 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)]