Python:处理Python列表
我有一个python列表Python:处理Python列表,python,list,Python,List,我有一个python列表x=[[a',1],[b',3],[d',5],我想将第二列的值存储在一个新列表y=[[a',1],[b',3],[c',0],[d',5] 第一个列表不一定包含所有a、b、c、d条目。 以下是我现在拥有的: x = [['a',1], ['b',3],['d',5]] y = [] b = ('a','b','c','d') for key in b: for i, sublist in enumerate(x):
x=[[a',1],[b',3],[d',5]
,我想将第二列的值存储在一个新列表y=[[a',1],[b',3],[c',0],[d',5]
第一个列表不一定包含所有a、b、c、d条目。
以下是我现在拥有的:
x = [['a',1], ['b',3],['d',5]]
y = []
b = ('a','b','c','d')
for key in b:
for i, sublist in enumerate(x):
if sublist[0] == key:
y.append(sublist)
else
y.append([key,0])
print y
这使得:
[['a', 1], ['a', 0], ['a', 0], ['b', 0], ['b', 3], ['b', 0], ['c', 0], ['c', 0], ['c', 0], ['d', 0], ['d', 0], ['d', 5]]
我做错了什么?作为第一种方法(有点类似于您打算编写的内容),我们可以使用显式循环:
x = [['a', 1], ['b', 3], ['d', 5]]
b = ['a', 'b', 'c', 'd']
y = []
for key in b:
for k, v in x:
if key == k: # if the key was found
y.append([k, v]) # add it with its value
break # and break from the loop
else:
y.append([key, 0]) # if the key was not found, add it with 0 value
更好的方法是使用字典加快查找速度,使用列表理解加快处理速度:
d = dict(x)
y = [[k, d[k]] if k in d else [k, 0] for k in b]
无论哪种方式,它都能按预期工作:
print y
=> [['a', 1], ['b', 3], ['c', 0], ['d', 5]]
作为第一种方法(有点类似于您打算编写的内容),我们可以使用显式循环:
x = [['a', 1], ['b', 3], ['d', 5]]
b = ['a', 'b', 'c', 'd']
y = []
for key in b:
for k, v in x:
if key == k: # if the key was found
y.append([k, v]) # add it with its value
break # and break from the loop
else:
y.append([key, 0]) # if the key was not found, add it with 0 value
更好的方法是使用字典加快查找速度,使用列表理解加快处理速度:
d = dict(x)
y = [[k, d[k]] if k in d else [k, 0] for k in b]
无论哪种方式,它都能按预期工作:
print y
=> [['a', 1], ['b', 3], ['c', 0], ['d', 5]]
一个明显错误的说法是
if sublist[0] == key:
y.append(sublist)
else
y.append([key,0])
这样,您可以为具有不同密钥的x
的每个元素插入一对[key,0]
<>但是你应该考虑稍微改写你的算法。例如,如果
x
是一个dict
而不是一个关联列表,那么您不必迭代它来测试键。一个明显错误的语句是
if sublist[0] == key:
y.append(sublist)
else
y.append([key,0])
这样,您可以为具有不同密钥的x
的每个元素插入一对[key,0]
<>但是你应该考虑稍微改写你的算法。例如,如果x
是一个dict
而不是一个关联列表,那么您不必迭代它来测试密钥。我在这里编写了一些代码(需要改进):
我在这里编写了一些代码(需要改进):
您最终只是想确保列表x中的键在列表b中吗?因为如果是这样,就不需要像那样嵌套循环。这反过来意味着您应该在关键字中使用
。此外,我不确定你在寻找匹配项时的目标是什么。您是否希望始终使用最新的值进行更新?每次在for循环中,您都在检查条件并将其附加到列表中。这是一个很长的结果,您最终只是试图确保列表x中的键位于列表b中?因为如果是这样,就不需要像那样嵌套循环。这反过来意味着您应该在
关键字中使用。此外,我不确定你在寻找匹配项时的目标是什么。您是否希望始终使用最新值进行更新?每次在for循环中,您都在检查条件并将其附加到列表中。这太长了resultDown投票者:是否要发表评论?我的回答给出了预期的结果!我不是选民。但是,我认为一个很好的答案是帮助OP了解,根据他们的努力,这不是最好的方法。很明显,他们正试图根据b中存在的列表x中的键执行操作。那么,为什么不提供一个解释来帮助OP了解一些关于正确检查的事情:akaif key in b
?另外,在你在代码中添加这些注释之前,就已经有了否决票。“之前的方式”,是的,就像50秒之前。当这个问题被否决时,我还在编辑它,没有任何解释来获得否决票。我只是提供我的意见。你不必拿我出气。:)投票人:有什么评论吗?我的回答给出了预期的结果!我不是选民。但是,我认为一个很好的答案是帮助OP了解,根据他们的努力,这不是最好的方法。很明显,他们正试图根据b中存在的列表x中的键执行操作。那么,为什么不提供一个解释来帮助OP了解一些关于正确检查的事情:akaif key in b
?另外,在你在代码中添加这些注释之前,就已经有了否决票。“之前的方式”,是的,就像50秒之前。当这个问题被否决时,我还在编辑它,没有任何解释来获得否决票。我只是提供我的意见。你不必拿我出气。:)OP需要一个列表作为输出,而不是一个复制了中间输出并已修复的目录。OP需要一个列表作为输出,而不是一个复制了中间输出并已修复的目录。