我在python中正确解释此列表理解吗?

时间:2018-11-14 20:46:45

标签: python list-comprehension

我对python还是很陌生,在阅读列表理解时仍然有些困惑。我尝试将在教程中看到的两个列表理解转换为它的加长形式。我翻译正确吗?

列表理解1

mytokens = [ word.lemma_.lower().strip() if word.lemma_ != "-PRON-" else word.lower_ for word in mytokens ]

翻译1

for word in mytokens:
    if word.lemma_ != "-PRON-":
        word.lemma_.lower().strip()
    else:
        word.lower_

列表理解2

mytokens = [ word for word in mytokens if word not in stopwords and word not in punctuations ]

翻译2

for word in mytokens:
    if word not in stopwords and not in punctuations:
        yield word

对于翻译2,我不认为“屈服词”是正确的,因为它不是一个定义。我猜想列表理解2会执行if语句并将单词放回列表mytokens中,所以它应该是.append吗?

2 个答案:

答案 0 :(得分:1)

我认为是正确的。您正在正确循环。但是,您不是要在列表中添加单词吗?您是要这样做吗?

因此您可以使用第一个

my_list = []
for word in mytokens:
    if word.lemma_ != "-PRON-":
        my_list.append(word.lemma_.lower().strip())
    else:
        my_list.append(word.lower_)

通过将它们添加到这样的列表中,这意味着您可以直接比较翻译的输出和列表理解的输出。如果正确完成,mytokens应该与my_list完全相同。

第二个翻译中也有一个小错误。应该是:

for word in mytokens:
    if word not in stopwords and word not in punctuations:
        yield word

您还可以修改第二个翻译,以将所有单词添加到列表中。

答案 1 :(得分:1)

让我们简化一下:

coll = ["Gerry", "Mary", "Sue"]

comprehended = [ word.lower() for word in coll]

def comprehender(coll):
  coll_out = []
  for word in coll:
      coll_out.append(word.lower())
  return coll_out

如果运行此命令,可以通过使用assert或仅return ing comprehended == comprehender(coll)

来确保两者相等。

这是一项有效的健全性检查,您可以对任何列表理解进行操作,只需更改此模式以匹配您的理解逻辑即可。