为什么我不能正确添加列表?

时间:2019-08-04 16:26:20

标签: python

我想做什么: 我要用户输入学生的姓名和分数:

我的代码:

master_pair=[]
pair=[]
b=int(input())
for i in range(b):
    name = input()
    score = float(input())
    pair.append(name)
    pair.append(score)
    print("pair")
    print(pair)
    print("master_pair")
    print(master_pair)
    master_pair.append(pair)
    print("master_pair")
    print(master_pair)
    pair.clear()
    print("pair")
    print(pair)

我期望的是: 假设我输入b(上面代码的第三行)的值为2。 并在第一次迭代中将名称输入为“ a”,并将分数设为1,然后在第二次迭代中将名称输入为“ b”,并将分数设为2。 所以我期望的输出是: [[“ a”,1.0],[“ b”,2]]

我得到的是如下 [[],[]]

为了了解事物在循环中的工作方式,我在循环中的不同阶段打印了两个列表(pair和master_pair)的值。

以下是循环工作时打印的输出:

2 一种 1个 对 ['a',1.0] master_pair [] master_pair [['a',1.0]] 对 [] b 2 对 ['b',2.0] master_pair [['b',2.0]] master_pair [['b',2.0],['b',2.0]] 对 []

这里b的值取为2。名字是a,a的分数是1。 第二个名称是b,b的分数取为2。 当我在循环执行完成后尝试打印master_pair的值时,我发现它为空。

我不了解我的理解中有什么问题。 请询问与此问题有关的详细信息。

2 个答案:

答案 0 :(得分:0)

您每次必须创建一个新列表:

master_pair = []
b = int(input())
for i in range(b):
    name = input()
    score = float(input())
    pair = [name, score]
    master_pair.append(pair)

答案 1 :(得分:0)

这将完美地解决您的问题。

export const getSortedNodesWithChildrenCountLabel = nodes => {
  return nodes
    .reduce(function f (output, node) {
      if (node?.children) {
        node.label += ` (${node.children.length})`
        node.children = node.children
          .reduce(f, [])
      }

      output.push(node)
      return output
    }, [])
}
  • 我们引入了配对,因此我们不必使用clear()(它会更好,我认为是这样)