python как считать слова в элементе списка - PullRequest
0 голосов
/ 27 января 2020
Код

ниже возвращает список:

[['We test robots'], ['Give us a try'], [' ']]

теперь мне нужно посчитать слова в каждом элементе, как я могу добиться этого в Python без импорта каких-либо пакетов. Выше я должен получить 3,4 и 1 для трех элементов списка. спасибо

import re
S ="We test robots.Give us a try? "

splitted = [l.split(',') for l in (re.split('\.|\!|\?',S)) if l]

print (splitted)

Ответы [ 5 ]

3 голосов
/ 27 января 2020

Есть несколько способов сделать это, вот два:

# using map
list(map(lambda x: len(x[0].split()) if len(x[0]) > 1 else 1, l))

[3, 4, 1]

# using list comprehension
[len(x[0].split()) if len(x[0]) > 1 else 1 for x in l]

[3, 4, 1]
1 голос
/ 27 января 2020

Если все ваши входные элементы являются списками, а все разделители - пробелами, то вы можете сделать это, ничего не импортируя:

input = [['We test robots'], ['Give us a try'], [' ']]
output = []

for item in input:
   output.append(len(item[0].split()))

print(output)  # [3, 4, 0]

Если вы хотите, чтобы пустой элемент печатал 1 вместо 0, просто отметьте если значение равно 0.

1 голос
/ 27 января 2020

Я предполагаю, что вы хотите сделать что-то вроде:

import re
S ="We test robots.Give us a try? "

splitted = [l.split(',') for l in (re.split('\.|\!|\?',S)) if l]

print(splitted)

for sentence in splitted:
    count = len(sentence[0].split())
    if not count and sentence[0]:
        count += 1
    print(count)

Будет печатать:

[['We test robots'], ['Give us a try'], [' ']]
3
4
1
0 голосов
/ 27 января 2020

Просто тренируюсь ...

def word_counter(passlist):
    do_count = lambda x: len(x.split())
    result=[]

    for elem in passlist:
        if isinstance(elem, list):
            result += [word_counter(elem)]
        elif isinstance(elem, str):
            result += [do_count(elem)]

    return result

print(word_counter([['We test robots'], ['Give us a try'], [' ']]))
# output: [[3], [4], [0]]

print(word_counter(['First of all', ['One more test'], [['Trying different list levels'], [' ']], 'Something more here']))
# output: [3, [3], [[4], [0]], 3]
0 голосов
/ 27 января 2020

для вычисления слов в каждом элементе

import re
S ="We test robots.Give us a try? "

splitted = [l.split(',') for l in (re.split('\.|\!|\?',S)) if l]

item =[]
for i in splitted:
    item.append(len(i[0].split()))

print(item)

вывод будет [3,4,0]

...