Используйте определенную функцию в списке списков в Python - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть определенная функция:

def map(id,txt):
   mapop= []
   words = txt.split()
   for word in words:
     tmp= (word,id,1)
     mapop.append(tmp)
   return mapop 

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

  1. Ниже приведен AttributeError: у объекта «list» нет атрибута «split»

    list(map(len,filtered_wordList))
    
  2. Это дает TypeError: map () отсутствует 1 обязательный позиционный аргумент: 'txt'

    [map(item) for item in filtered_wordList] 
    
  3. Это дает TypeError: map () принимает 2 позиционных аргумента, но 89 было дано

    mapped=[]
    for line in filtered_wordList:
       temp=map(*line)
    mapped.append(temp)
    

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

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Как уже отмечали другие, непосредственная проблема заключается в том, что вы спорите с самим собой: вы не были последовательны в отношении того, какие аргументы должна использовать ваша функция - является ли вводимый текст одним предложением или списком предложений. Я позволил себе сменить имя функции. Вот предложенное использование, которое, я думаю, решает вашу проблему. Вы можете сократить несколько блоков операторов до одной строки, но я ожидаю, что текущая версия будет более читабельной для вас.

filtered_wordlist = [
    'Call me Ishmael',
    'The boy was odd',
    'They could only say it just "happened to happen" and was not very likely to happen again.'
]

def word_id(id,txt):
   mapop= []
   words = txt.split()
   for word in words:
     tmp= (word,id,1)
     mapop.append(tmp)
   return mapop 


lexicon = []
for id, sentence in enumerate(filtered_wordlist):
    lexicon.append(word_id(id, sentence))

print(lexicon)

Вывод (с дополнительными разрывами строк для удобства чтения):

[('Call', 0, 1), ('me', 0, 1), ('Ishmael', 0, 1),
 ('The', 1, 1), ('boy', 1, 1), ('was', 1, 1), ('odd', 1, 1),
 ('They', 2, 1), ('could', 2, 1), ('only', 2, 1), ('say', 2, 1),
 ('it', 2, 1), ('just', 2, 1), ('"happened', 2, 1), ('to', 2, 1),
 ('happen"', 2, 1), ('and', 2, 1), ('was', 2, 1), ('not', 2, 1),
 ('very', 2, 1), ('likely', 2, 1), ('to', 2, 1), ('happen', 2, 1),
 ('again.', 2, 1)]
0 голосов
/ 12 сентября 2018

Если вы используете свою карту функций следующим образом:

text = 'Stack Overflow is great'
map(2, text)

Она выводит:

[('Stack', 2, 1), ('Overflow', 2, 1), ('is', 2, 1), ('great', 2, 1)]

Ваша функция принимает переменную id и текст (который должен бытьстрока).Он разбивает текст на пробелы следующим образом:

['Stack', 'Overflow', 'is', 'great'] 

И перебирает каждое слово в этом списке и добавляет кортеж, который включает слово, идентификатор, который вы передаете, и 1 в ваш список mapop следующим образом:

('Stack', 2, 1)

После того, как оно зацикливается на каждом слове, возвращается mapop

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...