首页 > 解决方案 > 返回所有单个字母的集合,而不是每个单词的集合

问题描述

当我有以下代码时,我不明白为什么我会收到每封信的一套;但是,当我简单地删除 'abcdefghijklmnopqrstuvwxyz ':''' 中的 '''if 单词时,我会收到每个短语的集合。但是,我需要一些可以删除任何不是空格的东西(即 / [ ] - 等,从较大的段落中,所以 abcd 是我能想到的最好的)。

两个后续问题:

  1. 似乎如果我使用 return 与 print,我会收到两个不同的答案(return 只返回最后一组;其中 print 返回所有组)。
  2. 而不是让它成为 5 个单独的集合,我如何将它放入 5 个集合的列表中?
def make_itemsets(words):
    words = str(words)
    words.lower().split()
    for word in words:
        newset = set()
        if word in 'abcdefghijklmnopqrstuvwxyz ':
            newset.update(word)
        
            print(newset)

words = ['sed', 'ut', 'perspiciatis', 'unde', 'omnis']    
make_itemsets(words)

这将返回五个列表(但不会删除所有多余的,也不会从较大的段落中删除非字符):

def make_itemsets(words):
    words = str(words)
    words.lower().split()
    for word in words:
        newset = set()
        newset.update(word)
        
        print(newset)

这将是预期的输出:

[{'d', 'e', 's'},
 {'t', 'u'},
 {'a', 'c', 'e', 'i', 'p', 'r', 's', 't'},
 {'d', 'e', 'n', 'u'},
 {'i', 'm', 'n', 'o', 's'}]

标签: python

解决方案


您可以像这样获得预期的输出:

print ( [set(w) for w in words] )

输出是:

[{'d', 's', 'e'}, {'u', 't'}, {'p', 'e', 'i', 'a', 'c', 'r', 's', 't'}, {'d', 'u', 'e', 'n'}, {'m', 'i', 'o', 's', 'n'}]

请注意,集合没有顺序。

如果您想要仅是字母字符的单词,您可以这样做:

print ( [set(w) for w in words if w.isalpha()] )

推荐阅读