使用python迭代到第二个数组的末尾
我做过这样的事情:使用python迭代到第二个数组的末尾,python,list,python-3.x,tuples,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)] d [('a', 0), ('f', 1), ('e', 0), ('f', 1)] 我只是想用数组值替换等价的元组值,而不改变相关的数字。但是这个列表只到数组e的len,而不是d。我想要得到的输出是这样的: d = [('e', 0), ('f', 1), ('e',
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)]
d
[('a', 0), ('f', 1), ('e', 0), ('f', 1)]
我只是想用数组值替换等价的元组值,而不改变相关的数字。但是这个列表只到数组e
的len,而不是d
。我想要得到的输出是这样的:
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)]
d
[('a', 0), ('f', 1), ('e', 0), ('f', 1)]
只需将未处理的
d
尾部添加到已处理零件:
[(n,j) for n,(i,j) in zip(e,d)] + d[len(e):]
#[('a', 0), ('f', 1), ('e', 0), ('f', 1)]
您可以使用
itertools.zip\u
:
[(n or i, j) for n,(i,j) in itertools.zip_longest(e, d)]
检查一下我想问题出在zip函数上。文档中说(zip)“返回元组迭代器,其中第i个元组包含每个参数序列或iterable中的第i个元素。当最短的输入iterable用完时,迭代器停止。”
[(n,j)for n,(i,j)in-zip(e,d)]+d[len(e):]
应该可以做到这一点如果可以接受对原始d
列表进行变异,我只需通过迭代e
来替换第一个d
元组:
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]=新字母
将失败并出现错误:
TypeError:“tuple”对象不支持项分配
上面的代码修改了
d
列表,用新元组替换旧元组。它无法修改旧元组。@Jean Françoisfare,是的,我没有看到py3标签,谢谢!您可以删除fillvalue=None
,因为这是默认设置。感谢您的解释。但是让我来编辑你的文章,使其格式正确。我也试过了。它给我的错误是:“tuple”对象不支持项目分配
,因此我强烈地拒绝了这个想法,我的上帝。它也起作用了。我仍然怀疑自己犯了什么错,而我之前也遵循了类似的过程。是的。。我得到了它。问题在于我所做的赋值。您已经这样分配了值d[i]=(新字母,d[i][1])
其中,我这样分配d[i][0]=新字母