问题:
我有一串数字,我们称之为strNumbers。我需要经历这个字符串,逐个字符地对每个数字进行计算直到某一点。那时,我需要一次开始拉出两个数字并对这两个数字进行计算。这就是我到目前为止所提出的,你可以看到我已经弄清楚如何迭代循环拉单个字符没问题。我也明白我需要一个计数器来确定我何时需要一次开始拉两个字符,但现在又怎样了?感谢任何帮助,谢谢。
for i in strNumbers:
intNumber = int (i)
**do math on intNumber*
**print result**
count = count +1
if count == 5:
??
编辑: 我已决定使用两个单独的循环来完成此任务,但我遇到了另一个问题。下面的代码抛出一个,TypeError:无法将'int'对象隐式地转换为str,number = int(strTail [i:i + 2])
for i in strTail:
number = int(strTail[i:i+2])
intRooted = int( math.sqrt(number))
strDecoded += str(intRooted)
从逻辑上讲,这似乎就是我想要做的事情,我把数字拉到位置'i'并且排在第i位置。我在这里缺少什么?
答案 0 :(得分:5)
您可以将字符串视为一个单独访问每个字符的数组(或一次两个)。因此,一旦达到指定的金额,您就可以设置一个标志,告诉您的循环一次开始使用两个字符。
i=0
offset = 1
while i <len(str_numbers):
if offset>1:
int_number = int(str_numbers[i:i+offset])
else:
int_number = int(str_numbers[i])
if i==5:
offset=2
i+=offset
编辑: 我只想到一种不那么令人困惑的方式:
offset=1
i=0
while i<len(str_numbers):
if i==5:
offset=2
int_number = int(str_numbers[i:i+offset])
i+=offset
答案 1 :(得分:0)
>>> my_nums = [1,2,3,4,5,6,7,8,9]
>>> dbl_nums = [[my_nums[i],my_nums[i+1]] for i in range(5,len(my_nums),2)] #double up numbers with index >= 5
>>> sngl_nums = map(lambda x:x*2,my_nums[:5]) #perform some math on single numbers for index < 5
>>> dbl_nums = map(lambda x:x[0]+x[1],dbl_nums) # do some math on 2 nums
>>> print dbl_nums # (6+7 , 8+9 )
[13, 17]
>>> print sngl_nums #(2*1,2*2,2*3,2*4,2*5)
[2, 4, 6, 8, 10]
>>> print sngl_nums+dbl_nums #combined back into one list
[2, 4, 6, 8, 10, 13, 17]
将一串数字转换为列表
my_nums = map(int,num_str)
>>> map(int,"123")
[1, 2, 3]
答案 2 :(得分:0)
如果你已经知道你想要的单个字符的数量,那么你可以做两个循环:
for s in strNumbers[:count]:
do_something
indices = range(len(strNumbers))
for i in indices[count::2]:
s = strNumbers[i:i+2]
do_something_else
或
for (s1, s2) in zip(strNumbers[count::2], srtNumbers[count+1::2]):
s = s1+s2
do_something_else
答案 3 :(得分:0)
我们可以在相关问题中使用一些代码,“How do you split a list into evenly sized chunks in Python?”。首先将您的字符串拆分为一位数的部分和两位数的部分,然后根据需要将其分块。
def chunks(l, n):
return [l[i:i+n] for i in range(0, len(l), n)]
strNumbers = "123456789012345"
single_part = chunks(strNumbers[:5], 1)
double_part = chunks(strNumbers[5:], 2)
string_numbers = single_part + double_part
numbers = [int(x) for x in string_numbers]
print numbers
#result: [1, 2, 3, 4, 5, 67, 89, 1, 23, 45]