这个想法是我有一个由 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/