Python - 通过一个字符串循环,一次拉1个字符然后2

时间:2012-10-01 16:25:11

标签: python

问题:

我有一串数字,我们称之为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位置。我在这里缺少什么?

4 个答案:

答案 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]