python - 将列表中的字符与给定较短范围内的数字相乘,同时忽略空格和数字并将结果连接在一起
问题描述
我想根据给定的开始和结束范围乘以一个单词的每个字母。我当前的代码如下,但它没有按预期工作:
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
解决方案
您可以使用zip
and执行以下操作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
推荐阅读
- angular - 如何在 Ag-Grid Angular 中添加下拉菜单?
- python - Python矩阵查找索引
- bash - 在bash中将承载令牌作为变量传递
- angular - 从开始日期和结束日期获取中间日期
- go - 使用 go-swagger openAPI 限制响应大小
- python - Plotly 将下拉菜单添加到图形
- python - 如果用户选择美国,如何显示美国用户的所有帖子(在 CharField Choices 中)
- python - BiRNN Keras 模型中的 SHAP 解释
- dropbox - 如何减少在 Python 中将许多文件上传到 Dropbox 的执行时间?
- odoo - 在客户发票会计模块中通过电子邮件发送不起作用 odoo 11