2016-03-01 37 views
0

道歉,如果这是显而易见的,但我对Python很新,我无法解决这个问题。在下面的代码中,我用一系列列表填充了一个元组,并且我试图用这个元组中的项创建一个新列表。我希望最终的结果将是test_raw保持不变,test_working将如下所示:Python不可变元组 - 我做错了什么?

[['aa', 1, 2, 99.5, ['bb', 1, 2, 27.2]], 
['aa', 5, 5, 74.2, ['bb', 5, 5, 37]]] 

但是,在这个过程中,我似乎是追加“BB”名单,我的元组为好。我认为一旦构建了一个元组,它就不能改变,但显然不是。任何想法发生了什么?

test_raw = (['aa',1,2,99.5], 
      ['bb',1,2,27.2], 
      ['aa',5,5,74.2], 
      ['bb',5,5,37]) 
test_working = [] 

for i in range(len(test_raw)): 
    if test_raw[i][0] == "aa": 
     test_working.append(test_raw[i]) 
for i in range(len(test_raw)): 
    if test_raw[i][0] == "bb": 
     for j in range(len(test_working)): 
      if test_working[j][1:3] == test_raw[i][1:3]: 
       test_working[j].append(test_raw[i]) 
       break 
print(test_raw) 
(['aa', 1, 2, 99.5, ['bb', 1, 2, 27.2]], ['bb', 1, 2, 27.2], ['aa',.....) 

回答

0

您不是追加到元组本身,而是元组内的列表。我不会为你调试你的代码,但是当你运行你的代码时,你会注意到你的第一个列表(最初为['aa',1,2,99.5])有一个新元素(['bb', 1, 2, 27.2]

你不追加到元组,你只是改变这是元组

内部列表考虑这个简单的例子

my_tuple = (1,2,3, [4,5,6]) 
my_tuple[3].append(7) 

这不添加到my_tuple,只是名单是它的最后一个元素

+0

感谢咨询。现在很明显。我当时看不到它。我现在可以看到,如果我不想改变我的原始数据,我应该将test_raw设置为元组的元组而不是元组的列表。 –

+0

@JC_RMB是的,这是确保您的数据保持不变的绝佳方法 – sedavidw