Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:处理Python列表_Python_List - Fatal编程技术网

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):

我有一个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):
            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了解一些关于正确检查的事情:aka
if key in b
?另外,在你在代码中添加这些注释之前,就已经有了否决票。“之前的方式”,是的,就像50秒之前。当这个问题被否决时,我还在编辑它,没有任何解释来获得否决票。我只是提供我的意见。你不必拿我出气。:)投票人:有什么评论吗?我的回答给出了预期的结果!我不是选民。但是,我认为一个很好的答案是帮助OP了解,根据他们的努力,这不是最好的方法。很明显,他们正试图根据b中存在的列表x中的键执行操作。那么,为什么不提供一个解释来帮助OP了解一些关于正确检查的事情:aka
if key in b
?另外,在你在代码中添加这些注释之前,就已经有了否决票。“之前的方式”,是的,就像50秒之前。当这个问题被否决时,我还在编辑它,没有任何解释来获得否决票。我只是提供我的意见。你不必拿我出气。:)OP需要一个列表作为输出,而不是一个复制了中间输出并已修复的目录。OP需要一个列表作为输出,而不是一个复制了中间输出并已修复的目录。