Appending items to a list of lists in python
本问题已经有最佳答案,请猛点这里访问。
我对列表索引很生气,无法解释我做错了什么。
我有一段代码,我想在其中创建一个列表,每个列表包含与我从一个
1 2 3 | Sample, V1, I1, V2, I2 0, 3, 0.01, 3, 0.02 1, 3, 0.01, 3, 0.03 |
等等。我想要的是创建一个列表,例如包含v1和i1(但我想以交互方式选择),格式为[[v1],[i1]],所以:
1 | [[3,3], [0.01, 0.01]] |
我使用的代码是:
1 2 3 4 5 | plot_data = [[]]*len(positions) for row in reader: for place in range(len(positions)): value = float(row[positions[place]]) plot_data[place].append(value) |
python列表是可变对象,这里:
1 | plot_data = [[]] * len(positions) |
您正在重复相同的列表
1 2 3 4 5 6 7 | >>> plot_data = [[]] * 3 >>> plot_data [[], [], []] >>> plot_data[0].append(1) >>> plot_data [[1], [1], [1]] >>> |
列表中的每个列表都是对同一对象的引用。你修改一个,你会看到所有的修改。
如果需要不同的列表,可以这样做:
1 | plot_data = [[] for _ in positions] |
例如:
1 2 3 4 5 6 | >>> pd = [[] for _ in range(3)] >>> pd [[], [], []] >>> pd[0].append(1) >>> pd [[1], [], []] |
1 2 3 4 5 6 7 8 9 10 | import csv cols = [' V1', ' I1'] # define your columns here, check the spaces! data = [[] for col in cols] # this creates a list of **different** lists, not a list of pointers to the same list like you did in [[]]*len(positions) with open('data.csv', 'r') as f: for rec in csv.DictReader(f): for l, col in zip(data, cols): l.append(float(rec[col])) print data # [[3.0, 3.0], [0.01, 0.01]] |