假设我想收集 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=dict()
for i in range(n):
k='row%d'%(i,)
l[k] = map(int, raw_input().split())
一开始这似乎是个好主意,但一旦你尝试过,你可能会意识到污染你的命名空间是不雅的
创建列表的常用方法是嵌套列表推导
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
并且在命名空间方面更容易接受
在我看来,这绝对是存储任意数量整数的最佳方式。您真的不想动态创建变量,主要是因为您以后如何使用它们。例如,如果您想使用数字 23,您可以轻松l[22]
获取您的数字,并处理输入 <23 个数字的情况:
try:
print l[22]
except IndexError:
print "No element 22!"
仅使用不同的变量名来调用可能未声明的变量会更加困难。
此外,您可以使用这种方式len(l)
找出您有多少个数字,而对于变量,您必须做一些混乱的事情locals()
,这不是一个好主意。