首页 > 解决方案 > 在列表理解中理解这个 if 语句

问题描述

在下面的代码中,

splits     = [(word[:i], word[i:])    for i in range(len(word) + 1)]
deletes    = [L + R[1:]               for L, R in splits if R]

对于给定的单词,if R最后一个列表理解中的含义是什么?

如果 RL+R[1:]中的每个L,R组合返回什么?splits存在吗?这是必要的检查吗?

标签: pythonpython-3.xlist-comprehension

解决方案


你可以看看(假设你的词是一个字符串):

word = 'my_word'
print([(word[:i], word[i:])    for i in range(len(word) + 1)])

输出:

[('', 'my_word'),
 ('m', 'y_word'),
 ('my', '_word'),
 ('my_', 'word'),
 ('my_w', 'ord'),
 ('my_wo', 'rd'),
 ('my_wor', 'd'),
 ('my_word', '')]

你可以看到你的最后一个元素有一个空字符串,如果你不检查你的 R,因为你正在使用 slicing(R[1:]),你会得到:IndexError: string index out of range,所以是的,有必要在这种情况下检查

if R是检查在列表理解中发生的方式,与普通 if 语句中的逻辑相同。

您可以在这里查看更多关于列表理解中的 if/else 的信息


推荐阅读