我有一个基于第一个元素的排序列表:
A = [(0.11, '201405'), (0.41, '201402'),.....,(1.5, '201430')] # values and time
并希望更改每个元组的第一个元素:
x = len(C) # C is a list and its length is 2
y = len(D) # D is a list and its length is 1
if x > y:
A[0[0:x]] = 0.0 # if x > y then set first element of A equal to zero (over length of C)
但我得到以下错误:
TypeError: 'int' object is not subscriptable
请建议修复它。
答案 0 :(得分:2)
这是一个不重新创建整个列表的示例:
for i, t in enumerate(A):
if i < 1:
A[i] = (0, t[1])
答案 1 :(得分:2)
如果我理解你的问题,你想用0
替换前几个元组中每个元组的第一个元素。元组不可修改,因此您无法修改列表中的现有元组,但您必须创建一个新列表,并保留新元组。您可以使用列表推导来完成此操作。
示例:
>>> A = [(1,"a"), (2,"b"), (3,"c"), (4,"d")]
>>> A = [(x if i > 1 else 0, y) for i, (x, y) in enumerate(A)]
>>> print A
[(0, 'a'), (0, 'b'), (3, 'c'), (4, 'd')]
这将枚举列表中的所有条目,并且对于每个条目创建一个元组,第一个元素为0
,如果该条目的索引i
低于某个阈值,或者原来的价值否则。
答案 2 :(得分:1)
A[0[0:x]] = 0.0
您在对0
号码使用下标表示法时出错。
答案 3 :(得分:1)
此外,元组是不可变类型。因此,不可能改变元组的内容。您最好生成一个新列表,例如:
A = [0.0]+A[1:]