【问题标题】:Can't Understand For Loops Python无法理解 For 循环 Python
【发布时间】:2013-10-15 23:25:04
【问题描述】:

所以我一直在尝试了解 python 中的循环,但我就是不明白它们是如何工作的。我正在尝试创建一个 for 循环,该循环将遍历一个数字列表并将它们加在一起,但我真的很难理解语法的工作原理。

据我了解,语法是:

for w in words:
    print w, len(w)

有人可以解释一下这个迭代变量是如何工作的(w),也许可以使用一个数字列表的例子吗?

我试过了,但我认为我错了。

numbers = raw_input("> ")
addition = 0
for number in numbers:
    addition = addition + number
print addition

【问题讨论】:

  • 如果有帮助,其他语言将其称为“foreach”循环。
  • 在第二个示例中,numbers 将是一个字符串。如果您遍历一个字符串,则每个项目(在您的示例中为number)将是该字符串中的单个字符。似乎您想要类似于遍历数字列表的东西 - 查看str.split() 以了解拆分字符串的方法(例如在空格上)。然后,您可以遍历它提供给您的列表,将每个数字显式转换为 int
  • 你的 for 循环很好,是你的 raw_inout 没有按照你的想法工作。尝试用 'numbers = (1, 4 , 5, 8)' 替换该行,你会看到你所期望的。

标签: python loops for-loop


【解决方案1】:

你所拥有的更像是一个foreach 循环。

可能是这样的:

input = raw_input("> ") #separate with spaces
sum = 0
numbers = [int(n) for n in input.split()]
for number in numbers:
    sum = sum + number
print sum

【讨论】:

  • 或:sum(int(n) for n in raw_input("> ").split())
  • @iCodez 但是如果没有 print 语句,我怎么知道你的紧凑 Python 是否正确? :)
  • 哈哈。我在不需要print 的Python 解释器中做到了这一点。 :)
  • 我不确定这个解释有什么帮助。 Python 没有foreach 循环。 Python 的for 循环总是相当于其他语言中的“foreach”,而且它在 OP 的代码中肯定不会比您的代码中的“foreach”更多。而且我怀疑一个不懂for循环的新手会因为知道其他一些语言调用相同的东西foreach而得到帮助。
【解决方案2】:

有两种for循环。

你习惯的大概是:

sum = 0
for i in range(0,10):
    sum += 1
#prints 9

您质疑的语法是集合表示法。它说“对于集合单词的每个成员 w”,打印 w 和 w 的长度。在 python 2.7 及更低版本中,print 可以用作包含多个要打印的内容的语句,例如,print w, len(w) 打印单词 w 及其长度。如 python 3 或更高版本中所述,这将不起作用。

【讨论】:

  • 只有一种 for 循环。 for i in range(0, 10) 循环遍历可迭代的 range(0, 10)
【解决方案3】:

For 循环获取 thing 中的每个项目,将该值分配给 wnumber 之类的变量,执行操作,然后继续执行下一个项目,直到它们用完。

让我们先让您的示例运行...

numberstring = raw_input("> ")  # expect a string like "1 2.0 4 100"
addition = 0
numberlist = numberstring.split(" ") # convert the chars into a list of "words"
for number in numberlist:
    addition = addition + float(number)
print addition

在不使用.split() 转换为列表的情况下,您的循环将遍历字符串的每个字母,将其解释为字母而不是数字。如果不将这些单词转换为数字(使用float()),它甚至可以将字符串重新组合在一起(除非在这种情况下初始化为零)。

列表混淆的一个来源:变量的名称无关紧要。如果您说for letter in myvar:,它不会强制程序选择字母。它只获取下一项并将该值分配给变量letter。在 Python 中,该项目可以是单词、数字等的列表,或者如果给定一个字符串,它将以字符作为项目。

另一种设想是,您有一个装满商品的购物篮,而收银员一次又一次地遍历它们:

for eachitem in mybasket: 
    # add item to total
    # go to next item.

如果你递给他们一袋苹果并让他们循环使用,他们会取出每个苹果,但如果你给他们一个篮子,他们会将袋子作为一个物品取出......

【讨论】:

  • numberstring.split(" ")之间的“”有什么意义?
  • .split() 将分隔符作为参数,因此在这种情况下,他告诉 split 将由单个空格分隔的每个值放入列表中。例如,我们可以对包含“1,2,3,4,5”的字符串使用 split 将数字放入 Python 列表中。 "1,2,3,4,5".split(",")
  • 它是可选的,但在这种情况下,指定一个空格作为用于将字符串拆分为列表的字符。如果您省略它,它将使用任何空白(包括" "),但我认为指定会更清楚。您可以使用逗号、冒号等进行拆分,甚至可以将它们连续链接在一起。
  • @user2855971:有关详细信息,请参阅 the docs,或者只需在交互式会话中输入 help(str.split)
【解决方案4】:

For 循环作用于iterables 的对象(能够一次返回一个对象的对象)。字符串是可迭代的

>>> for c in "this is iterable":
...   print c + " ",
...
t  h  i  s     i  s     i  t  e  r  a  b  l  e

但是数字不是。

>>> for x in 3:
...   print "this is not"
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

为了迭代一系列数字,python 为您提供了一个不错的 generator 函数,称为...您猜对了,range 在 Python 2.x 中返回一个列表。

>>> for x in range(3):
...   print x
...
0
1
2

【讨论】:

  • 一点点:range 不是生成器函数。它返回一个列表,而不是生成器。 (在 3.x 中,它返回自定义的 range 可迭代而不是列表,但它仍然不是生成器。无论如何,您的代码显然是 2.x。)否则,很好的解释,以及指向 iterable 的链接词汇表是引导读者发现更多信息的好方法。
【解决方案5】:

嗯,一个小的控制台会话应该可以解决这个问题。简单来说,Python 循环遍历 iterable 对象。现在这是什么意思。这意味着就像字符串、列表或数组一样。

>>> numbers = [1, 2, 3, 4, 5]
>>> for n in numbers: print n
1
2
3
4
5

基本上,它会循环遍历它可以循环的任何内容。这是另一个例子:

>>> my_happy_string = "cheese"
>>> for c in my_happy_string: print c
c
h
e
e
s
e

这是一个包含单词列表的示例:

>>> list_of_words = ["hello", "cat", "world", "mouse"]
>>> for word in list_of_words: print word
hello
cat
world
mouse

基本上,python 需要它可以循环的对象来创建一个 for 循环,所以如果你想要一个从 0 开始并在 10 结束的 for 循环,你可以这样做:

>>> for i in range(0, 10): print i
0
1
2
3
4
5
6
7
8
9

让我们看看range函数返回什么:

>>> range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

基本上,它只是返回一个列表。所以,简单来说,你需要一个东西的清单。从技术上讲,字符串是一个字符列表。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 2011-04-29
    • 2017-09-11
    • 2023-03-11
    • 2019-05-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多