python 如何计算列表元素中的字数

python how to count words in a list element

下面的代码 returns 列表:

[['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)

我假设您想执行以下操作:

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

有多种方法可以做到这一点,这里有两种:

# 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]

用于计算每个元素中的单词

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]

如果您所有的输入元素都是列表,并且所有的分隔符都是空格,那么您可以在不导入任何内容的情况下执行此操作:

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。

正在练习...

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]