循环遍历列表并根据字符串条件返回新的整数值

2024-09-26 22:53:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在看以下格式的列表

lst = [ '1,000 per month', '1,200 per month', '300 per week', '1,200 per month']

并尝试创建一个循环,该循环运行并将任何带有“month”的字符串转换为其int值,但对于任何包含“week”的字符串,将其转换为int,然后应用int*52/12的计算(本质上是将周值转换为月值)。因此,列表应如下所示

new_lst = ['1000', '1200', '1300', '1200']

下面是我讨厌的企图

for i in lst:
if string.find('week'):
    return [re.sub("[^0-9]", "", s) for i in lst] * 52 / 12
else:
    return [re.sub("[^0-9]", "", s) for i in lst]

Tags: 字符串inre列表newforreturn格式
3条回答

哈尔蒙已经给了你一个明确的答案,我对他的答案投了赞成票。你应该用这个作为你的回答

然而,如果你正在寻找一个列表理解,这里是你可以着手做的

import re
lst = [ '1,000 per month', '1,200 per month', '300 per week', '1,200 per month']
lst = [re.sub("[^0-9]", "", i) if 'month' in i else str(int(int(re.sub("[^0-9]", "", i))*52/12)) if 'week' in i else i for i in lst]
print (lst)

输出将根据您对字符串的要求:

['1000', '1200', '1300', '1200']

如果输入为:

lst = [ '1,000 per month', '1,200 per month', '300 per week', '1,200 per year']

输出将是:

['1000', '1200', '1300', '1,200 per year']

保持一年不变

这应该行得通

lst = [ '1,000 per month', '1,200 per month', '300 per week', '1,200 per month']
new_lst=[]
for i in lst:
    if i.find('week') > 0:
        new_lst.append(round(int(re.sub("[^0-9]", "", i)) * 52 / 12))
    else:
        new_lst.append(int(re.sub("[^0-9]", "", i)))
print(new_lst)

输出:

[1000, 1200, 1300, 1200]

你真的很接近

我们可以循环浏览列表,并在适当的位置修改列表。对于每个字符串,我们检查您想要的单词是否在其中。如果是,我们将继续使用正则表达式删除除数字以外的所有内容,并最终将字符串转换为int:

import re

lst = [ '1,000 per month', '1,200 per month', '300 per week', '1,200 per month']

for count, i in enumerate(lst):
    if 'week' in i:
        lst[count] = int(re.sub("[^0-9]", "", i)) * 52 // 12
    elif 'month' in i:
        lst[count] = int(re.sub("[^0-9]", "", i))

print(lst) # [1000, 1200, 1300, 1200]

注意:如果我们使用/进行除法,那么答案将以浮点形式出现。然而,如果我们使用//,我们进行整数除法,结果仍然是整数

相关问题 更多 >

    热门问题