Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何过滤python列表中的未知元素_Python_Python 3.x_String_List - Fatal编程技术网

如何过滤python列表中的未知元素

如何过滤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

我正在尝试制作一个程序,它给出了一周中几天(周一、周二、周三等)的缩写,并用完整的单词(周一、周二、周三)替换这些缩写。程序创建一个充满字符串的列表,并将其作为字符串输出。我有这个工作,除了当一些不是一周中的一天被使用。例如,一个单词不是Mon、Tue、Wed等(如代码中所示),我希望能够过滤掉不需要的单词,但不知道如何过滤。请帮忙

守则:

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.