【发布时间】:2020-09-09 17:16:39
【问题描述】:
我的问题旨在在列表理解中使用 for 循环的 else 条件。
示例:
empty_list = []
def example_func(text):
for a in text.split():
for b in a.split(","):
empty_list.append(b)
else:
empty_list.append(" ")
我想通过对两个 for 循环使用列表推导来使其更简洁。
但是我怎样才能通过为其中一个循环(在本例中为第二个)包含一个转义子句来做到这一点。 我知道我可以在列表理解中使用 if 和 else 。但是如果没有 if 语句,使用 else 怎么样。
有没有办法让解释器将其理解为 for 循环的转义子句?
非常感谢任何帮助!
编辑: 感谢您的回答!事实上,我正在尝试翻译摩尔斯电码。
输入是一个字符串,包含莫尔斯电码。 每个单词由 3 个空格分隔。每个单词的每个字母之间用 1 个空格隔开。
def decoder(code):
str_list = []
for i in code.split(" "):
for e in i.split():
str_list.append(morse_code_dic[e])
else:
str_list.append(" ")
return "".join(str_list[:-1]).capitalize()
print(decoder(".. - .-- .- ... .- --. --- --- -.. -.. .- -.--"))
我想把整个句子分解成单词,然后翻译每个单词。 内循环(一个词的翻译)完成后,它会启动它的转义子句else,加上一个空格,这样整个句子的结构就会被保留下来。这样,3 个空格将被转换为一个空格。
【问题讨论】:
-
您的内部
for将始终完成,因此else看起来它将始终运行。看起来这应该只是a.split(",")中的一个单独条目。empty_list = list(itertools.chain(a.split(","), [" "]))?或者只是empty_list = a.split(","); empty_list.append(" ")。我觉得你把事情复杂化了。不需要原始的for循环,因此将设计一个列表理解。 -
列表推导不能使用
break,因此,“常规”循环的可选else子句在列表推导中没有意义。 -
当你的外部 for 循环完成时,你 else 的重点是总是添加一个空格吗?
-
我想你可以做类似
[x for a in text.split() for x in list(a.split(",")) + [' ']](未经测试)的事情,但老实说,我不确定将它写成列表组合是否是一种改进。但是,出于 Carcigenicate 所述的原因,您确实希望删除多余的else:行。 -
谢谢大家。我更新了最初的问题,以便您了解我的意图。
标签: python list list-comprehension