使用python迭代到第二个数组的末尾

时间:2017-08-02 07:14:43

标签: python list python-3.x tuples

我做过这样的事情:

d = [('e', 0), ('f', 1), ('e', 0), ('f', 1)]
e = ['a']
d = [(n,j) for n,(i,j) in zip(e,d)]
d
[('a',0)]

我只是尝试用数组值替换等效的元组值,而不更改相关的数字。但是列表只到数组e的len而不是d。我希望得到的输出是这样的:

d
[('a', 0), ('f', 1), ('e', 0), ('f', 1)]

4 个答案:

答案 0 :(得分:4)

只需将SELECT '{"' + t.groupId + '": [' + STUFF( ( SELECT ',{ "some_data":"' + td.some_data + '"', ', "some_other_data":' + CONVERT( NVARCHAR, td.some_other_data ) + '}' FROM some_table td WHERE t.groupId = td.groupId FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') + ']}' FROM some_table t GROUP BY t.groupId 的未处理尾部添加到已处理部分:

d

答案 1 :(得分:3)

您可以使用itertools.zip_longest

[(n or i, j) for n,(i,j) in itertools.zip_longest(e, d)]

检查doc

答案 2 :(得分:1)

如果改变原始d列表是可以接受的,我只需通过迭代d来替换第一个e元组:

d = [('e', 0), ('f', 1), ('e', 0), ('f', 1)]
e = ['a']

for i, new_letter in enumerate(e):
    d[i] = (new_letter, d[i][1])

print(d)
# [('a', 0), ('f', 1), ('e', 0), ('f', 1)]

请注意,Python元组是不可变的。 d[i][0] = new_letter会因错误而失败:

  

TypeError:' tuple'对象不支持项目分配

上面的代码通过用新的元组替换旧元组来修改d列表。它无法修改旧元组。

答案 3 :(得分:0)

我认为问题是zip功能。文档说(zip)“返回元组的迭代器,其中第i个元组包含来自每个参数序列或迭代的第i个元素。迭代器在最短的输入可迭代用尽时停止。”

[(n,j) for n,(i,j) in zip(e,d)] + d[len(e):]应该做的伎俩