python - 对列表进行设置操作

标签 python list set

这个想法是我有一个由 4 个子字符串组成的字符串“four”。我试图从“文件夹”列表中查找与 4 个子字符串(子集)完全匹配的单词。所以“paul”会匹配,但“pauls”不会。我遇到的唯一问题是“集合”无法处理相同的字符串。下面的代码将打印“aa”,但字符串“four”中只有一个 a。是否有可用于列表的操作“issubset”?

four = "laup"

four = set(four)

folder = ["paul","joshua","other","asdf","joshua","aa","hello"]

for word in folder:
    wordstrings = set(word)
    if wordstrings.issubset(four):
            print(word)

最佳答案

如果您想匹配相同的字符(包括重复),请使用 Counter dict计算每个单词中的字符数:

four = "laup"
from collections import Counter
four = Counter(four)

folder = ["paul","joshua","other","asdf","joshua","aa","hello"]

for word in folder:
    wordstrings = Counter(word)
    if not wordstrings - four:
            print(word)

如果在 A - B 之后得到一个空计数器,则意味着 A 中的所有字母在 A 中出现的次数至少与在 B 中出现的次数相同:

In [14]: Counter("foos") - Counter("foo")
Out[14]: Counter({'s': 1})

In [15]: Counter("foo") - Counter("foos")
Out[15]: Counter()

In [16]: Counter("pauls") - Counter("paul")
Out[16]: Counter({'s': 1})

In [17]: Counter("paul") - Counter("paul")
Out[17]: Counter()

您还可以使用 all 确保字符串中的字符至少出现在四个应用程序中,如果其中一个没有出现,就会短路:

for word in folder:
    wordstrings = Counter(word)
    if all(wordstrings[k] - four[k] <= 0 for k in wordstrings):
            print(word)

集合根本不起作用,因为所有元素都是唯一的,因此重复的字符将被计为 1。

关于python - 对列表进行设置操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36269248/

相关文章:

python - 有没有办法在进行 PyDev 组织导入时不换行?

python - 混淆矩阵实际值每K轮更改一次

java - 如何使用自己的比较器按类的字段进行排序?

java - 列表内的数组

mysql - 在 MySQL 中将 SET 更改为 ENUM?

python - PyQt:连接对话框中的按钮

python - 使用 Pyhive 插入 Hive 调用错误

python - 要索引的 id 的交叉引用列表

Python:子类化 frozenset 不可迭代?

java - 将控制台数据输出写入文本文件