【问题标题】:Does Python syntax prevent me from creating this list comprehension?Python 语法是否会阻止我创建此列表理解?
【发布时间】:2019-12-24 03:41:11
【问题描述】:

我正在尝试将 for 循环 (A) 重新创建为列表理解。我认为这里的问题是需要对 ni 执行太多函数,即对其进行平方,然后在附加到 nn 之前确保它是一个整数。

列表推导 (B) 试图让列表推导获取一个字符串 (m) 并将每个单独的数字平方为整数。问题是它需要将每个数字作为字符串进行迭代,然后将自身平方为单独的整数。

一个

n = str(2002)
nn = []

for x in range(len(n)):
    ni = n[x]
    ns = int(ni)**2
    nn.append(ns)

print(nn)

[4, 0, 0, 4]

B

m = str(9119)

mm = [(int(m[x]))**2 for x in m]

TypeError:字符串索引必须是整数

这让我觉得 A 不能作为列表理解来完成?希望了解您对替代方案和/或直接解决方案的想法。

【问题讨论】:

  • 你为什么要m[x]?您已经在迭代for x in m,所以只需执行int(x)。将循环转换为列表理解非常简单,而且您非常接近。你的问题是你改变了你的循环。在 A 中你做 for x in range(len(n)) 但在 B for x in m。要么做int(x)**2 for x in m要么int(m[x])**2 for x in range(len(m)),但坚持一个......
  • 谢谢,我的困惑是我不知道 range() 和列表理解之间的区别

标签: python python-3.x syntax list-comprehension


【解决方案1】:

x 代表m 中的每个数字。所以你只需要平方它

mm = [int(x)**2 for x in m]

【讨论】:

    【解决方案2】:

    您正在传递一个字符串作为索引!

    此外,您尝试使用每个索引处的数字而不是其索引来索引字符串m(例如,您尝试使用m[9] 来索引m[0]

    尝试改用以下方法:

    m = str(9119)
    
    mm = [int(x)**2 for x in m] #Thanks @Gelineau
    

    希望这会有所帮助!

    【讨论】:

    • mm = [(int(x))**2 for x in m] 更好。
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2017-12-30
    相关资源
    最近更新 更多