将元组的第一个元素替换为一定长度的零

时间:2014-11-28 13:16:34

标签: python list python-2.7 tuples

我有一个基于第一个元素的排序列表:

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

请建议修复它。

4 个答案:

答案 0 :(得分:2)

  1. 正如iharob所说,你有一个下标符号错误​​。
  2. 元组是不可变的。您不能只替换列表中元组的1个元素。你必须用另一个包含0.0作为第一个值和现有第二个值的元组替换整个元组。请注意,列表是可修改的,但元组不是。这就是为什么你可以更新列表A,但你必须用新的元组替换元组。
  3. 这是一个不重新创建整个列表的示例:

    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:]