【问题标题】:Python loop back to beginning of listPython循环回到列表的开头
【发布时间】:2017-12-19 05:28:38
【问题描述】:

我有这个清单:

x = ['a', 'b', 'c', 'd']

我想以这种方式从中召回一组项目:

z = x[1]

print y = [z, z+6, z+7]

['a', 'c', 'd']

当然,当我这样做时,它会告诉我它超出了范围。我不明白为什么它不起作用。你能帮我解决这个问题吗?

【问题讨论】:

  • 你不会超出范围,你会得到无效的语法。给你一本好的 Python 手册。

标签: python list loops


【解决方案1】:

您在向我们展示的代码中弄乱了一些东西。让我们仔细看看这里发生了什么。

z = x[1]

在这行代码中,您从位于索引1 的数组x 中分配一个值。在这种情况下,这意味着将'b' 分配给变量z(数组从0 开始索引)。

print y = [z, z+6, z+7]

这里有无效的语法。首先,您不能将值分配给变量的结果打印到控制台。其次,您不能在一个数组中存储两种不同的类型。你的情况

[z, z+6, z+7]

相当于:

['b', 'b'+6, 'b'+7]

Python 不明白您所说的 'b'+6 是什么意思 - 这个表达式不正确,因为您根本无法将 6 添加到字符串中。根据你的预期输出,我猜你期待的是这样的:

y = [z, x[6 % len(x)], x[7 % len(x)]]

现在让我们逐步解释这段代码。首先让我们将z 变量替换为它的实际值:

y = ['b', x[6 % len(x)], x[7 % len(x)]]

然后让我们用实际值替换len(x)

y = ['b', x[6 % 4], x[7 % 4]]

然后让我们评估模运算:

y = ['b', x[2], x[3]]

最后,让我们将x[2]x[3] 替换为它们的实际值:

y = ['b', 'c', 'd']

当然,在这种情况下,数组y'b' 作为第一个元素开始。这是因为我们将x[1] 分配给了z 变量。当然,要获得'a',我们必须使用z = x[0]

完整示例:

x = ['a', 'b', 'c', 'd']

z = x[0]

y = [z, x[6 % len(x)], x[7 % len(x)]]

print y

输出

['a', 'c', 'd']

希望它能帮助您了解您的代码出了什么问题。

【讨论】:

  • 嘿Szymon,谢谢你非常详细的解释。我绝对不擅长编写干净的代码jaja。我想它仍然没有回答我的问题。也许我没有完全解释自己。我正在尝试制作一个能吐出某个主要和弦的音乐剧本。
  • 嗨@JoaquinFraga,请提供更多信息,以便我们为您提供帮助。尝试编辑您的问题以提供更多详细信息。如果由于声誉低而无法做到这一点,请将其粘贴到此处,例如gist.github.com 我会相应地更新你的问题
猜你喜欢
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多