【问题标题】:New to learning python; why is the print for this for-loop different when I use a list comprehension? how do i make the loop be the same?学习python的新手;当我使用列表理解时,为什么这个 for 循环的打印不同?我如何使循环相同?
【发布时间】:2021-03-27 19:12:55
【问题描述】:

根据我的理解,两者的 X 打印不应该相同吗?我需要的答案是来自列表理解的答案,这是一个新列表,其中每个元素都是原始列表中的 -1。但是for循环只给出1个元素,我也不知道该元素是如何计算的。打印 x 只给出列表的最后一个元素。我确定我做错了什么,但我不确定如何仅使用 for 循环来获取列表。令我困惑的是,如果 print(x) 是 for 循环的一部分,它将打印我需要的所需列表的元素,但不在列表中,这意味着我编写的数学按预期工作,对吗?

list= [1,2,3,4,5]


#loop
x=[]
for i in list:
  x=[i-1]
print(x)

#list comprehension

x=[i-1 for i in list]
print(x)

#confusing part where this print will be the same as the comprehension but not in a list form
 x=[]
for i in list:
  x=[i-1]
  print(x)

【问题讨论】:

  • 我认为您的意思是在循环中执行 x += [i-1] 而不是 x = [i-1]。另请注意,将列表命名为list 是不好的,因为它会影响list 函数,并且会在某些时候导致非常混乱的错误。
  • 请注意,最好不要将集合命名为与内置函数相同的名称(listset、..),因为它是 clobbers 该范围内的内置函数!
  • 我会牢记这一点,我想通过将其命名为“列表”来澄清这一点,但这里的每个人都知道我应该知道这个问题
  • @Oak 实践建议:在业务代码中,您将在范围内的内容或目的/角色之后命名列表。虽然大多数教育代码都非常抽象命名,但您现在就可以开始了。训练您的命名技巧,应用约定和(最佳)实践以使您的代码易于阅读——例如重命名为numbers(带有复数“s”的集合名称)或num_list(混合名称形式,参见匈牙利符号)????

标签: python for-loop list-comprehension


【解决方案1】:

首先,list 是一个受保护的关键字。您至少应该使用 list_ (如果您确实需要使用 list 作为名称,那就是命名约定)。

第二个逐个元素地迭代,并打印每个元素,你想要的是在循环中一个一个地设置每个元素,然后打印x(不在循环内)。

list_= [1,2,3,4,5]

x=[]
for i in list_:
  x.append(i-1)
print(x)

【讨论】:

  • 非常感谢,我完全忘记了 .append 这正是我所缺少的。希望这些事情能在未来留下记忆。
  • @Oak 您提供的反馈很有帮助。请将您的感激之词转化为行动并点赞或接受!这就是我们在这里奖励和表示感谢的方式?
【解决方案2】:

你应该像这样追加:

lst= [1,2,3,4,5]

#loop
x=[] 
for i in lst: 
    x.append(i-1)
print(x)
#output: [0, 1, 2, 3, 4]

#list comprehension
x=[i-1 for i in lst] 
print(x)
#output: [0, 1, 2, 3, 4]

【讨论】:

  • 你回答了两次,删除重复的答案
  • @miquelvir 完成!顺便说一句,您的答案(稍后发布)与我的相同。
  • 非常感谢,我完全忘记了 .append 这正是我所缺少的。希望这些事情能在未来留下记忆。
  • 完美!我们似乎同时写作;虽然我向 OP 解释了使用列表作为名称的问题......但是不幸的是,我们都浪费了时间
  • @Oak 欢迎来到 Stack Overflow。本站的礼仪是接受符合你需求的答案。阅读:stackoverflow.com/help/….
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多