列表理解返回相同列表的列表

时间:2017-06-16 20:12:19

标签: python function list-comprehension

在我看来,以下代码应该只是重建输入列表,而是获得该列表的三个副本的列表。

outlist = []
inputList = ["input1", "input2", "input3"]
def bar(input, outlist):
    temp = input
    outlist.append(temp)
    return outlist
r1 = [bar(i, outlist) for i in inputList]

但我的结果

r1
Out[28]: 
[['input1', 'input2', 'input3'],
 ['input1', 'input2', 'input3'],
 ['input1', 'input2', 'input3']]

我认为这是我的意思:

  1. 创建一个空列表
  2. 对于输入列表中的每个项目,将其附加到outlist。
  3. 在输入列表中完成所有三次迭代后返回结果。
  4. 那么我在这里缺少什么/不理解?为什么我会得到三个相同列表的列表,而不仅仅是这些列表中的一个?很抱歉,如果之前已经询问过,但如果有,我无法找到它(可能是因为我没有找到正确的术语)

    编辑:对不起,如果我不清楚。我的目标不是创建列表的副本,我只是认为这将是一个简单的示例来演示列表结果列表。请不要将此标记为该问题的副本,因为列表复制不是问题的主题。

    Edit2:我想要的输出:     ['input1','input2','input3']

    换句话说,我想创建一个列表推导,它遍历列表,对该列表中的项执行某些操作,并将该项追加到作为输出的列表中。这是另一个例子,只是要明确复制原始列表不是我的观点:

    outlist = []
    inputList = [1, 2, 3]
    def bar(input, outlist):
        temp = input + 1
        outlist.append(temp)
        return outlist
    r1 = [bar(i, outlist) for i in inputList]
    
    
    r1
    Out[31]: 
    [[2, 3, 4], [2, 3, 4], [2, 3, 4]]
    

    期望的输出:

    [2,3,4]
    

    对不起,如果我在这里很厚......

1 个答案:

答案 0 :(得分:1)

编辑:

In[71]: def bar(item):
   ...:     return item + 1
   ...: 
In[72]: [bar(i) for i in [1, 2, 3]]
Out[72]: [2, 3, 4]

In[73]: [i + 1 for i in [1, 2, 3]]
Out[73]: [2, 3, 4]