将二维列表中的第一个匹配项添加到另一个列表中 (Python 3.4.2)
Adding first occurrence in a 2D list to another list (Python 3.4.2)
这是我目前的代码:
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"]]
如何将它们存储在字典中?
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()]
当您需要向代码添加功能时,将它们放在字典中几乎肯定会有所帮助,因为您可能希望按值而不是索引来查找内容。
我认为没有理由进行枚举,因为列表中的索引似乎对结果并不重要。只需遍历列表,取出两个值,然后简单地验证取出的第一个值是否已经在 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)
这是我目前的代码:
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"]]
如何将它们存储在字典中?
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()]
当您需要向代码添加功能时,将它们放在字典中几乎肯定会有所帮助,因为您可能希望按值而不是索引来查找内容。
我认为没有理由进行枚举,因为列表中的索引似乎对结果并不重要。只需遍历列表,取出两个值,然后简单地验证取出的第一个值是否已经在 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)