Python从列表中删除一个单词的字符串

3
words = [['hey', 'hey you'], ['ok', 'ok no', 'boy', 'hey ma']]

我有一个包含字符串的列表,其中嵌套了多个子列表。我知道如何从列表中删除特定元素,但不知道如何删除那些只有一个单词的元素。我希望得到以下输出结果:

final = [['hey you'], ['ok no', 'hey ma']]

我正在尝试,但我认为完全错误...

remove = [' ']
check_list = []

for i in words:
    tmp = []
    for v in i:
        a = v.split()
        j = ' '.join([i for i in a if i not in remove])
        tmp.append(j)

    check_list.append(tmp)
print check_list

“我认为这完全是错误的” - 它能正常工作吗?你有进行过测试吗? - jonrsharpe
是的,我已经测试过了,但是 check_list 的输出与 words 相同。 - user47467
1
好的,请提供一个 [mcve]。 - jonrsharpe
我不确定我理解你的意思... - user47467
然后阅读链接。 将代码削减并提供带有预期和实际输出的示例输入,以便其他人不必仔细查看它。 - jonrsharpe
我有一个示例输入和期望的输出... 我无法再缩减代码了。 - user47467
4个回答

5

您可以进行以下操作:

words = [['hey', 'hey you'], ['ok', 'ok no', 'boy', 'hey ma']]
final = [[x for x in sub if ' ' in x.strip()] for sub in words]
# [['hey you'], ['ok no', 'hey ma']]

我只需在所有字符串中搜索空格。


@PeterWood ... 刚刚通过先剥离字符串来进行了更正。 - Julien Spronck

2
您可以使用filter
for words in list_of_lists: 
    words[:] = list(filter(lambda x: ' ' in x.strip(), words))

或者使用列表推导式:

for words in list_of_lists:
    words[:] = [x for x in words if ' ' in x.strip()]

0

使用函数式编程来实现:

>>> words
[['hey', 'hey you'], ['ok', 'ok no', 'boy', 'hey ma']]
>>> map(lambda v: ' '.join(v),
    filter(lambda y: len(y) > 1, map(lambda x: x.split(), words[1])))
['ok no', 'hey ma']
>>> map(lambda z: map(lambda v: ' '.join(v),
    filter(lambda y: len(y) > 1, map(lambda x: x.split(), z))), words)
[['hey you'], ['ok no', 'hey ma']]

-1

这是每个列表的逻辑,你可以循环并使用它

wordlist=['hey', 'hey you']
filter(None,  [ p if re.sub('\\b\\w+\\b', '', p) != '' else None for p in wordlist ])

输出

['hey you']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接