在'for'循环内动态创建变量

时间:2014-08-16 07:06:05

标签: python python-2.7 python-3.x coding-style

我是python的新手,并尝试采取一些编码挑战来提高我的技能。我将通过以下方式接受输入:

 2
 3 1
 4 3

首先,我获得了一些测试用例。(2这里)然后基于此,我将获得给定数量的测试用例,每个测试用例为2个整数。第一个是范围,第二个是范围内要搜索的数字。

获得输入的正确,pythonic方式是什么。我这样想,但显然是incorrect

num_testcases = int(raw_input())
for i in num_testcases:
    range_limit = int(raw_input())
    num_to_find = int(raw_input())

2 个答案:

答案 0 :(得分:1)

使用for i in range(num_testcases):代替for i in num_testcases。看看range(或Python 2中的xrange)。 range(a)生成从0a - 1的可迭代,因此您的代码会被调用所需的次数。


此外,inputraw_input会在遇到换行符时接受输入,这意味着在range_limit = int(raw_input())中,raw_input会返回"3 1",您可以[{1}}我只是转换为int。相反,您希望使用string.split 拆分字符串,然后转换单个项目:

num_testcases = int(raw_input())
for i in range(num_testcases):
    range_limit, num_to_find = [int(x) for x in raw_input().split()]

答案 1 :(得分:1)

raw_input()将从STDIN一次读取一行,因此在循环内部,您需要使用str.split()来获取range_limitnum_to_find的值。其次,你不能迭代整数(num_testcases),所以你需要在那里使用xrange()(Python 2)或range()(Python 3):

num_testcases = int(raw_input())
for i in xrange(num_testcases): #considering we are using Python 2
    range_limit, num_to_find = map(int, raw_input().split())
    #do something with the first input here 

<强>演示:

>>> line = '3 1'
>>> line.split()
['3', '1']
>>> map(int, line.split())
[3, 1]

请注意,在Python 3中,您必须使用input()而不是raw_input()range()而不是xrange()range()将在Python 2和3中都有效,但它会在Python 2中返回一个列表,因此建议使用xrange()