Правильно ли я интерпретирую это понимание списка в python? - PullRequest
0 голосов
/ 14 ноября 2018

Я все еще довольно новичок в 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, я не думаю, что слово "yield word" будет правильным, поскольку оно не является определением. Я предполагаю, что понимание списка 2 выполняет оператор if и помещает слово обратно в список mytokens, так что, возможно, это должен быть файл .append?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Давайте упростим это:

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)

Это действительная проверка здравомыслия, которую вы можете выполнить при любом понимании списка, вы просто меняете этот шаблон в соответствии с логикой вашего понимания.

0 голосов
/ 14 ноября 2018

Я думаю, что это правильно.Вы правильно зацикливаетесь.Тем не менее, вы не добавляете слова в список?Вы хотите этим заниматься?

Таким образом, для первого вы можете использовать

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

Вы также можете изменить этот второй перевод, чтобы добавить все свои слова в список.

...