【问题标题】:Python - assigning values to n variables in a for loopPython - 在for循环中为n个变量赋值
【发布时间】:2013-06-09 02:37:29
【问题描述】:

假设我想收集 n 个列表作为输入。 我以前做的是:

l=[]
for i in range(n):
    row=map(int,raw_input().split())
    l.append(row)

然后我曾经通过 l[0],l[1],...,l[n] 访问这些列表。

有没有更优雅的方法来做到这一点?我的意思是像在 for 循环中动态创建变量,名称如下:row1,row2,...,rown?

【问题讨论】:

  • 你现在的做法听起来比拥有这些变量要好。
  • 这里唯一真正错误的是使用l作为变量名,正如PEP8警告的那样,它在某些字体中看起来太像1

标签: python list variables input


【解决方案1】:

每当您问自己如何创建动态变量时,答案都是“使用字典”。

l=dict()
for i in range(n):
    k='row%d'%(i,)
    l[k] = map(int, raw_input().split())

【讨论】:

  • 但是没有哈希值;还不如使用列表
  • 同意,如果变量名称只是整数有序列表的变体。但是,这个答案只是解决了如何使用具有动态生成的键的字典来代替一组动态生成的变量名称。
  • 也许它作为字典理解会更优雅
  • 可能。我仍然使用 Python 2.6,但即使在那里我也可以写 l=dict( ('row%d'%(i,), map(int, raw_input().split())) for i in range(n) 或者更优雅的东西。
【解决方案2】:

一开始这似乎是个好主意,但一旦你尝试过,你可能会意识到污染你的命名空间是不雅的

创建列表的常用方法是嵌套列表理解

rows = [[int(j) for j in i] for i in raw_input().split()]

如果你觉得更清楚,你可以把 map 扔进去

rows = [map(int, i) for i in raw_input().split()]

然后你有 rows[0]rows[1]... 等,这与 row0 row1... 并没有什么不同,而且在命名空间方面更容易接受

【讨论】:

    【解决方案3】:

    在我看来,这绝对是存储任意数量整数的最佳方式。您真的不想动态创建变量,主要是因为您以后如何使用它们。例如,如果您想使用数字 23,您可以轻松地通过 l[22] 获取您的数字,并处理输入

    try:
        print l[22]
    except IndexError:
        print "No element 22!"
    

    仅使用不同的变量名来调用可能未声明的变量会困难得多。

    此外,通过这种方式,您可以使用 len(l) 找出您有多少个数字,而对于变量,您必须使用 locals() 做一些混乱的事情,这不是一个好主意。

    【讨论】:

      猜你喜欢
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多