这是我目前的代码:
num = 0
sav = [["Name: ", "Josh", "Score", "1"], ["Name", "James", "Score: ", "2"], ["Name: ", "Josh", "Score: ", "2"]]
sav2 = [[]*5 for _ in range(len(sav)]
name2 = sav[num][1]
for i, j in enumerate(sav2):
if name2 not in j:
sav2.append(sav[num])
num = num+1
print('hi')
else:
print('hello')
num = num+1
print(sav2)
理想情况下,每个名称和分数都会进入sav2
,只要该名称不在其中。但是,当我运行这个时,我得到一个错误 - 列表索引超出sav2.append(sav[num])
范围。 (注意 - "hi"
和"hello"
只是为了确保我的if / else语句正常工作(确实如此)。)
最终结果:
sav2 = [["Name: ", "Josh","Score: ", "1"], ["Name: ", "James", "Score: ", "2"]]
答案 0 :(得分:1)
如何将它们存储在字典中?
sav2 = {}
for (name, number) in list_of_lists:
if name not in sav2:
sav2[name] = number
导致:
sav2 = {"Josh":"1", "James":"2"}
如果你需要保留列表排序,你可以使用OrderedDict,如果你想要的话,可以回到列表列表:
sav2list = [[k,v] for k,v in sav2.items()]
当你需要在代码中添加功能时,将它们放在字典中几乎肯定会帮助你,因为你可能想要按值而不是索引来查找。
答案 1 :(得分:1)
我认为没有理由进行枚举,因为它没有显示列表中的索引对结果很重要。只需遍历列表,拉出两个值,然后只需验证拉出的第一个值是否已经存在于sav2中。如果找到匹配项,可以使用for循环中的else子句来完成此操作,并与break语句结合使用。
sav = [["Josh", "1"], ["James", "2"], ["Josh", "2"]]
sav2 = []
for i, j in sav:
for name, num in sav2:
if name == i:
break
else:
sav2.append([i,j])
print(sav2)