Как удалить строку определенной длины из вложенного списка? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть вложенный список строк, корпус , состоящий из списков разной длины.Я хочу сохранить только строки, длина которых больше 2.

Из аналогичного вопроса в как удалить элемент из вложенного списка? Я перепробовал все ответы, которые позволили мне указатьдлина условия> 2.

Код

corpus = list(r_corpus('teeny.txt'))
print('initial corpus here ',corpus)

#Current attempt
[[ subelt for subelt in elt if len(subelt) >2 ] for elt in corpus] 

#previous attempt 1
##for thing in corpus:
##    [y for y in thing if len(y)>2]

#previous attempt 2
##for sentence in corpus:
##    sentence = [x for x in sentence if len(x) > 2 ]

print('\n\n corpus here without any string of length 2 or smaller',corpus)

Это результат текущей попытки, которая одинакова для двух предыдущих попыток.

initial корпус здесь

[['extracting', 'opinions'],
['soo', 'min', 'kim', 'and'],
['abstract'],
['this', 'paper', 'presents', 'method', 'for', 'identifying', 'an'], 
['this', 'section', 'reviews', 'previous', 'works', 'in'], 
['subjectivity', 'detection', 'is'], 
['work', 'is', 'similar', 'to', 'ours', 'but', 'different']]

корпус с любой строкой длиной 2 или меньше

[['extracting', 'opinions'],
['soo', 'min', 'kim', 'and'], 
['abstract'], 
['this', 'paper', 'presents', 'method', 'for', 'identifying', 'an'], 
['this', 'section', 'reviews', 'previous', 'works', 'in'], 
['subjectivity', 'detection', 'is'], 
['work', 'is', 'similar', 'to', 'ours', 'but', 'different']]

Что мне нужно

Самый быстрыйВозможный способ иметь вторую версию корпуса без каких-либо строк длиной 2 или меньше:

корпус без каких-либо строк длины 2 или меньше

[['extracting', 'opinions'], 
['soo', 'min', 'kim', 'and'], 
['abstract'], 
['this', 'paper', 'presents', 'method', 'for', 'identifying'], 
['this', 'section', 'reviews', 'previous', 'works'],
['subjectivity', 'detection'],
['work','similar','ours', 'but', 'different']]

Спасибо.

1 Ответ

0 голосов
/ 26 мая 2018

@ Vera , вы можете попробовать приведенный ниже код.Он использует такие понятия, как понимание списка , лямбда-функция , map () , filter и т. Д.

Использование понимание списка , лямбда-функция , map () , filter () , lower () и т. Д.. - это Pythonic способ решать проблемы более простым, эффективным и лаконичным способом.

Вы можете проверить Понимание списка и map (), filter (), redu (), lambdaфункция и т. д., чтобы взглянуть на приведенные примеры, связанные с этими понятиями, с объяснением.

import json

corpus = [['extracting', 'opinions'],
['soo', 'min', 'kim', 'and'],
['abstract'],
['this', 'paper', 'presents', 'method', 'for', 'identifying', 'an'], 
['this', 'section', 'reviews', 'previous', 'works', 'in'], 
['subjectivity', 'detection', 'is'], 
['work', 'is', 'similar', 'to', 'ours', 'but', 'different']]

new_corpus = list( map(lambda words: list(filter(lambda word: len(word)> 2, words)), corpus))

# Pretty printing list of lists of words of length > 2
print(json.dumps(new_corpus, indent=2))

"""
[
  [
    "extracting",
    "opinions"
  ],
  [
    "soo",
    "min",
    "kim",
    "and"
  ],
  [
    "abstract"
  ],
  [
    "this",
    "paper",
    "presents",
    "method",
    "for",
    "identifying"
  ],
 [
    "this",
    "section",
    "reviews",
    "previous",
    "works"
  ],
  [
    "subjectivity",
    "detection"
  ],
  [
    "work",
    "similar",
    "ours",
    "but",
    "different"
  ]
]
"""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...