如何过滤python列表中的未知元素
我正在尝试制作一个程序,它给出了一周中几天(周一、周二、周三等)的缩写,并用完整的单词(周一、周二、周三)替换这些缩写。程序创建一个充满字符串的列表,并将其作为字符串输出。我有这个工作,除了当一些不是一周中的一天被使用。例如,一个单词不是Mon、Tue、Wed等(如代码中所示),我希望能够过滤掉不需要的单词,但不知道如何过滤。请帮忙 守则:如何过滤python列表中的未知元素,python,python-3.x,string,list,Python,Python 3.x,String,List,我正在尝试制作一个程序,它给出了一周中几天(周一、周二、周三等)的缩写,并用完整的单词(周一、周二、周三)替换这些缩写。程序创建一个充满字符串的列表,并将其作为字符串输出。我有这个工作,除了当一些不是一周中的一天被使用。例如,一个单词不是Mon、Tue、Wed等(如代码中所示),我希望能够过滤掉不需要的单词,但不知道如何过滤。请帮忙 守则: days = [] def format_days(days): days = [d.replace('Mon', 'Monday') for d
days = []
def format_days(days):
days = [d.replace('Mon', 'Monday') for d in days]
days = [d.replace('Tue', 'Tuesday') for d in days]
days = [d.replace('Wed', 'Wednesday') for d in days]
days = [d.replace('Thu', 'Thursday') for d in days]
days = [d.replace('Fri', 'Friday') for d in days]
days = [d.replace('Sat', 'Saturday') for d in days]
days = [d.replace('Sun', 'Sunday') for d in days]
return days
answer = format_days(['Sat', 'Fun', 'Tue', 'Thu'])
print(answer)
# ['Saturday', 'Fun', 'Tuesday', 'Thursday'] <-- This is the output
# ['Saturday', 'Tuesday', 'Thursday'] <-- This is the output I want
days=[]
def格式_天(天):
天=[d.替换('Mon','Monday'),表示d,以天为单位]
天=[d.替换('Tue','星期二'),表示d,以天为单位]
天数=[d.替换('Wed','周三')表示d,以天为单位]
天数=[d.替换('Thu','周四'),表示d,以天为单位]
天数=[d.替换('Fri','Friday'),表示d的天数]
天数=[d.替换('Sat','Saturday'),表示d的天数]
天数=[d.替换('Sun'、'Sunday'),表示d的天数]
回归日
答案=格式(星期六、星期五、星期二、星期四)
打印(答案)
#['Saturday'、'Fun'、'周二'、'Thurday']你可以编一本有效单词的字典。如果遇到有效日期以外的任何内容,将忽略它
def fromat_days(days):
valid_days={'Mon':'Monday',
'Tue':'Tuesday',
...
'Sun':'Sunday'}
return [valid_days[day] for day in days if day in valid_days]
您可以从缩写到全名的映射开始,然后仅在映射中存在缩写时替换:
map_to_names = {'Mon': 'Monday', 'Tue': 'Tuesday', ..., 'Sun': 'Sunday'}
result = [map_to_names[s] for s in days if s in map_to_names]
我建议你用不同的方法来解决这个问题。首先定义一个字典,将一天中的前三个字母映射到整个名称:
days_of_week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
d = {day[:3]:day for day in days_of_week}
print(d)
{'Mon': 'Monday',
'Tue': 'Tuesday',
'Wed': 'Wednesday',
'Thu': 'Thursday',
'Fri': 'Friday',
'Sat': 'Saturday',
'Sun': 'Sunday'}
并将列表理解与条件语句一起使用,以便在字典中找不到给定大小写时不会返回任何内容:
[d.get(i) for i in ['Sat', 'Fun', 'Tue', 'Thu'] if i in d]
# ['Saturday', 'Tuesday', 'Thursday']
除了其他答案之外,您还可以使用函数、今天的缩写和完整的工作日名称:
from calendar import day_abbr, day_name
day_map = dict(zip(day_abbr, day_name))
days = ['Mon', 'Wed', 'Fri', 'Sat']
print([day_map[d] for d in days if d in days])
# ['Monday', 'Wednesday', 'Friday', 'Saturday']
这很有用,因为您不必自己生成day字典 您可以在dict中存储映射btw的前3个字符和日期:
w_day = {'Mon': 'Monday',
'Tue': 'Tuesday',
'Wed': 'Wednesday',
'Thu': 'Thursday',
'Fri': 'Friday',
'Sat': 'Saturday',
'Sun': 'Sunday'}
def format_days(days):
return list(filter(None, map(w_day.get, days)))
format_days(['Sat', 'Fun', 'Tue', 'Thu'])
输出:
['Saturday', 'Tuesday', 'Thursday']
当你尝试这样做的时候,问题是什么?你是否尝试过使用某种形式的if
语句?那么,如果它与(两个!)现有的其他答案相同,你为什么要发布它呢?它或多或少是在同一时间发布的(我花时间添加解释后,我使用了更长的工具)@mkrieger1Nice-answer。我很懒,只使用了日历
模块。也不确定为什么需要get(i)
,因为您已经检查了if i in d
get()
如果默认情况下找不到键,则返回None
,但如果d中的i
为True
则永远不会返回。如果错了,请纠正我。是的,你是对的。把它放在那里是因为我想用不同的方式来做:)但你是对的,不是真的需要@roadload乐于帮助;)@skribbsta@Ch3steR我也有同样的问题。@RoadRunner看起来像是有人在疯狂地投下一票。。)回答得好。从不知道日历
模块+1.