集合列表,set.add()正在添加到列表中的所有集合

时间:2015-07-15 20:08:49

标签: python list set

我正在尝试遍历电子表格并在其中创建一组所有列,同时将值添加到各自的集合中。

storage = [ set() ]*35 #there's 35 columns in the excel sheet
for line in in_file: #iterate through all the lines in the file
    t = line.split('\t') #split the line by all the tabs
    for i in range(0, len(t)): #iterate through all the tabs of the line
        if t[i]: #if the entry isn't empty
            storage[i].add(t[i]) #add the ith entry of the to the ith set

如果我为storage[0].add(t[0])执行此操作,它会起作用,但它会添加到存储列表中的所有集合中...为什么会这样做?我正在指定我想要添加它的集合。我没有发布打印出来的集合b / c它是如此之大但基本上每个集合都是相同的并且具有来自选项卡的所有条目

2 个答案:

答案 0 :(得分:8)

storage = [set()] * 35

这会创建一个列出相同集 35次的列表。要创建包含35个不同集的列表,请使用:

storage = [set() for i in range(35)]

第二种形式确保多次调用set()。第一种形式只调用一次,然后反复复制该单个对象引用。

答案 1 :(得分:0)

storage = [ set() ]*35

>>>[id(i) for i in storage]
 [3055749916L,
 3055749916L,
 3055749916L,
 .....
 3055749916L]

你可以看到所有人都在引用同一个对象。所以试试

storage = [set() for i in range(35)]
>>>[id(i) for i in storage]
[3054483692L,
 3054483804L,
 .....
 3054483916L,
 3054484028L]