首页 > 解决方案 > 将列表中的字符与给定较短范围内的数字相乘,同时忽略空格和数字并将结果连接在一起

问题描述

我想根据给定的开始和结束范围乘以一个单词的每个字母。我当前的代码如下,但它没有按预期工作:

word = ['h', 'e', 'l', 'p', 'm', 'e']
start = 3
end = 5
for b in range(start, end + 1):
    for a in word:
        print(a * b, end='')

我的输出是:

hhheeelllpppmmmeeehhhheeeellllppppmmmmeeeehhhhheeeeelllllpppppmmmmmeeeee

但我想收到:

hhheeeelllllpppmmmmeeeee

这个程序的流程应该是这样的:

helpme
345345

另外,我怎么能忽略列表中的空格和数字?例如,我的输入是:

['h', 'e', 'l', 'p', ' ', 'm', 'e']
start = 3
end = 5

我的输出:

hhheeeelllllppp mmmmeeeee

所以乘法应该是:

help me
3453145

标签: pythonstringlist

解决方案


您可以使用zipand执行以下操作itertools.cycle

import itertools

word = ['h', 'e', 'l', 'p', 'm', 'e']
start = 3
end = 5

for a, b in zip(itertools.cycle(range(start, end + 1)), word):
    print(b*a, end = '')

输出:

hhheeeelllllpppmmmmeeeee

或者,您可以使用模运算符和来执行此操作enumerate

word = ['h', 'e', 'l', 'p', 'm', 'e']
start = 3
end = 5

lst = list(range(start, end + 1))

for i, a in enumerate(word):
    print(a*lst[i%len(lst)], end='')

要忽略某些字符:

import itertools

word = ['h', 'e', 'l', 'p', ' ', '1', 'm', 'e']
start = 3
end = 5

characters_to_ignore=' 0123456789'

gen = itertools.cycle(range(start, end + 1))

lst = [(x, next(gen)) if x not in characters_to_ignore else (x, 1) for x in word]

for a, b in lst:
    print(a*b, end='')

输出:

hhheeeelllllppp 1mmmmeeeee

推荐阅读