Python 在这种情况下,如何从列表理解转到循环?
我必须在不使用列表理解的情况下执行以下操作。 我有一个如下所示的列表:Python 在这种情况下,如何从列表理解转到循环?,python,list,list-comprehension,Python,List,List Comprehension,我必须在不使用列表理解的情况下执行以下操作。 我有一个如下所示的列表: ["Mi Fa Sol", 'Mi', "Mi Fa Sol La Si", "Do Si", " Mi Si Fa", "Fa"] ["Mi", "Fa", "Sol", "Mi", "Mi", "Fa"
["Mi Fa Sol", 'Mi', "Mi Fa Sol La Si", "Do Si", " Mi Si Fa", "Fa"]
["Mi", "Fa", "Sol", "Mi", "Mi", "Fa", "Sol", "La", "Si", "Do", "Si", "Mi", "Si", "Fa", "Fa"]
我想得到的是一个如下列表:
["Mi Fa Sol", 'Mi', "Mi Fa Sol La Si", "Do Si", " Mi Si Fa", "Fa"]
["Mi", "Fa", "Sol", "Mi", "Mi", "Fa", "Sol", "La", "Si", "Do", "Si", "Mi", "Si", "Fa", "Fa"]
我认为,我可以通过以下方式做到这一点:
lst = [elem.strip().split() for elem in lst]
lst = [elem for sub_lst in lst for elem in sub_lst]
但是我不知道如何在没有列表理解的情况下实现相同的结果。您当前使用两个单独列表理解的版本可以简化为使用单个列表理解:
lst = [e for elem in lst for e in elem.split()]
但是,如果要使用传统的for
循环,则可以像当前一样循环lst
的每个elem
,并使用将拆分的元素添加到结果列表res
:
lst = ["Mi Fa Sol", 'Mi', "Mi Fa Sol La Si", "Do Si", " Mi Si Fa", "Fa"]
res = []
for elem in lst:
res.extend(elem.split())
print(res)
输出:
['Mi', 'Fa', 'Sol', 'Mi', 'Mi', 'Fa', 'Sol', 'La', 'Si', 'Do', 'Si', 'Mi', 'Si', 'Fa', 'Fa']
如果以后需要,您可以将res
分配回lst
旁注:由于您使用了
split()
的默认分隔符,因此在这种情况下,您还可以省略冗余的strip()
。以下是一种功能方法:
>>音乐=[“我的歌”、“我的歌”、“我的歌”、“我的歌”、“我的歌”、“我的歌”、“我的歌”]
>>>减少(λx,y:x+y,映射(str.split,music))
['Mi','Fa','Sol','Mi','Mi','Fa','Sol','La','Si','Do','Si','Mi','Si','Fa','Fa']
lambda表达式可以替换为运算符。添加:
导入运算符
>>>reduce(operator.add、map(str.split、music))
['Mi','Fa','Sol','Mi','Mi','Fa','Sol','La','Si','Do','Si','Mi','Si','Fa','Fa']
要使上述代码段在Python 3中工作,您必须包括以下句子:
从functools导入reduce