1

问题:

我有一串数字,我们称之为strNumbers。我需要遍历这个字符串,一个字符一个字符地对每个数字进行计算,直到某个点。那时,我需要开始一次提取两个数字并对这两个数字进行计算。到目前为止,这是我想出的,正如您所看到的,我已经弄清楚如何遍历循环拉单个字符没有问题。我也知道我需要一个计数器来确定我何时需要开始一次拉两个字符,但是现在怎么办?任何帮助表示赞赏,谢谢。

for i in strNumbers:    
    intNumber = int (i)
    **do math on intNumber*
    **print result**
    count = count +1
    if count == 5:
        ??

编辑:我决定使用两个单独的循环来完成这项任务,但是我遇到了另一个问题。下面的代码抛出一个 TypeError: Can't convert 'int' object to str 隐式地在 line, 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前面的第一位置。我在这里想念什么?

4

4 回答 4

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
于 2012-10-01T16:30:04.290 回答
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]
于 2012-10-01T16:29:23.427 回答
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
于 2012-10-01T16:34:55.563 回答
0

我们可以在相关问题中使用一些代码,“如何在 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]
于 2012-10-01T16:53:27.800 回答