在更改其中一个元素的同时,从现有元组创建新元组?

时间:2013-04-15 18:28:10

标签: python

我有一个像这样的元组列表:

[('Ben', '5 0 0 0 0 0 0 1 0 1 -3 5 0 0 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 1 3 0 1 0 -5 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 5 5 5 -5'),
 ('Moose', '5 5 0 0 0 0 3 0 0 1 0 5 3 0 5 0 3 3 5 0 0 0 0 0 5 0 0 0 0 0 3 5 0 0 0 0 0 5 -3 0 0 0 5 0 0 0 0 0 0 5 5 0 3 0 0'),
  ...]

它会持续一段时间。

我对python(以及一般的编程)比较陌生,所以我很难弄清楚如何使用每个元组的item [1]元素修改创建一个新元组,但是item [0]元素每一个都没有动过。我想做的就是将每个元组的第二个元素放入所有这些数字的列表中。我试着只是.split()它,但元组是不可变的。 那你怎么解决这个问题呢?

最终它是一个开始练习的例子。我们根据每部电影的收视率制作了一部非常原始的电影推荐人,每一部电影都是该电影对应的评级。

1 个答案:

答案 0 :(得分:5)

由于元组是不可变的,你必须根据旧元组创建新元素:

data = [('Ben', '5 0 0 0 0 0 0 1 0 1 -3 5 0 0 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 1 3 0 1 0 -5 0 0 5 5 0 5 5 5 0 5 5 0 0 0 5 5 5 5 -5'),
        ('Moose', '5 5 0 0 0 0 3 0 0 1 0 5 3 0 5 0 3 3 5 0 0 0 0 0 5 0 0 0 0 0 3 5 0 0 0 0 0 5 -3 0 0 0 5 0 0 0 0 0 0 5 5 0 3 0 0')]

data = [(name, ratings.split()) for name, ratings in data]

如果您不熟悉列表推导,这相当于

new_data = []
for name, ratings in data:
    new_data.append( (name, ratings.split()) )
data = new_data