列表理解与for循环之间的区别

时间:2018-10-24 04:53:40

标签: python python-3.x

$custprice = $_POST['custprice'];

foreach ($custprice as $key => $value) {

  if($value > 0){

  $sql3 = "INSERT INTO price_file(id,prod_code,price)
            VALUES($lastid,'$key',$value)";

  $result2 = $db->query($sql3);

  if($result2){
    $prompt = 'worked';
    return $prompt;
    }
  }
}

输出

    [custprice] => Array
    (
        [BACC] => 
        [SHC] => 
        [BML] => 
        [HTL] => 90
    )

上面的输出是我想要的。

但是,如果我稍稍更改代码并期望获得相同的输出,但是获得不同的输出。

代码

n=input()
y=n.split()
a=([int(x) for x in y])
print(a)

输出

python .\input_into_list.py
1 2 3
[1, 2, 3]

请说明第一个代码中的第3行与第二个代码中的第3行和第4行之间的区别。

谢谢。

5 个答案:

答案 0 :(得分:2)

第一个示例是所谓的列表理解。它根据您的值(按顺序)以及在这种情况下的输入cols = ['Column1'] for col in cols: dt[f'New {col}'] = (dt.groupby(pd.qcut(dt[col], 3))[col] .transform(lambda x: x.max() + x.min()) / 2) print (dt) Column1 New Column1 0 1 2.0 1 2 2.0 2 3 2.0 3 4 5.0 4 5 5.0 5 6 5.0 6 7 8.0 7 8 8.0 8 9 8.0 创建一个列表。鼓励列表理解,因为它的简单性和明确的目的可以返回列表。

y

您的第二个示例是a = [int(x) for x in y] 循环,与列表理解不同,循环可用于遍历序列并执行多个复杂任务。但是,在您的示例变量for中,它会不断更新为a中的最新值。

y

要获得与列表理解相同的结果:

for i in y:
    print(i)
    a = [i]

为简短起见,如果您打算返回列表,请尽可能使用列表理解功能。对于Python以及任何语言,都没有一成不变的规则,因此请谨慎考虑效率和可读性。

答案 1 :(得分:0)

在第一个脚本中,您将所有值添加到一行中。

在第二个脚本中,您将在每个循环上重新分配一个。

尝试附加到a。

n=input()
y=n.split()
a = []
for x in y:
    a.append(int(x))
print(a)

答案 2 :(得分:0)

在创建列表的第一个代码中,然后在第二个代码中将其命名为“ a”,您必须为第二个代码的每个循环更改“ a”的值

n=input()
a=[]

y=n.split()
for x in y:
    a.append(int(x)) 
print(a)

编辑

n=input()
a=[]

y=n.split()
   for x in y:
      a.append(int(x)) # Remove brackets [] that means that you append a list in a list

for i in a:
   print(i) # or print(i,end='') if you want to print it in one line

答案 3 :(得分:0)

主要区别在于外观运行速度。列表理解更短更易于理解更快的执行时间

在代码中,如果要使其与列表理解相同,则需要将每个元素附加到列表:

n=input()
y=n.split()
a=[]
for x in y:
    a.append(int(x))
print(a)

这将为您提供与列表理解一相同的结果。另外,n.split()方法本身将输入作为元素列表返回。所以:

n=input()
y=n.split()
print(y)

这与上面的相同。只是最后一条评论,当您使用 list comprehension 或其他分配列表时,您无需将元素包装在方括号内,例如:()

n=input()
y=n.split()
a=[int(x) for x in y]
print(a)

答案 4 :(得分:-3)

这是缩进错误:

n=input()
y=n.split()
for x in y:
    a=([int(x)])
    print(a,end=' ')