1

假设我想收集 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 ?

4

3 回答 3

2

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

l=dict()
for i in range(n):
    k='row%d'%(i,)
    l[k] = map(int, raw_input().split())
于 2013-06-12T20:30:23.117 回答
1

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

创建列表的常用方法是嵌套列表推导

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]... etc 这与 ... 并没有什么不同,row0 row1并且在命名空间方面更容易接受

于 2013-06-12T20:31:26.030 回答
0

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

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

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

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

于 2013-06-12T20:32:37.980 回答