我有一个二维列表,其中内部维度总是有3个值(前两个值是字符串,最后一个是整数),外部维度只保存这些值:
my_list=[["a","b",10],["c","d",12],["e","f",64]]
我有一个试图将新的3值列表附加到my_list
的函数。如果该列表的第一个和第二个值与my_list中当前列表的第一个和第二个值匹配,我想将它们的最后一个(整数)值加在一起。
例如,尝试将["a","b",3]
添加到my_list只会改变my_list:
my_list=[["a","b",13],["c","d",12],["e","f",64]]
但是,如果尝试将["b","a",3]
添加到my_list,则只会更改my_list:
my_list=[["a","b",10],["c","d",12],["e","f",64], ["b","a",3]]
这是我的代码:
my_list=[["a","b",10],["c","d",12],["e","f",64]]
a=["a","b",3]
for x in my_list:
if x[:2]==a[:2]:
x[3]=x[3]+a[3]
我收到以下错误:
Traceback (most recent call last):
File "./test", line 9, in <module>
x[3]=x[3]+a[3]
IndexError: list index out of range
答案 0 :(得分:3)
python中的列表索引是从零开始,因此您的三元素列表由0
,1
和2
编制索引,而不是{您的代码需要{1}},1
和2
。此外,以3
为键的字典可能是更好的数据结构。
答案 1 :(得分:2)
我认为这是你想要做的,虽然它不接受输入,功能很好
my_list=[["a","b",10],["c","d",12],["e","f",64]]
a=["a","b",3]
for x in my_list:
if x[0] == a[0] and x[1] == a[1]:
x[2] += a[2]
答案 2 :(得分:1)
我建议使用词典,对此类任务更有效:
my_dict={("a","b"):10,("c","d"):12, ("e","f"):64}
def add (key,value):
if key not in my_dict: my_dict[key]=value
else: my_dict[key]+=value
add(("a","b"),3)
add(("b","a"),3)
print(my_dict)
{('a', 'b'): 13, ('b', 'a'): 3, ('e', 'f'): 64, ('c', 'd'): 12}