从包含另一个单词排列的python列表中找出单词

2024-05-12 18:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python列表,其中包含各种单词。{I要从列表中找出所有单词。 例如:

import sys
words_list=['llaa','lala','alal','aall','abcd','egg','adore', ...]
word=sys.argv[1]

我输入laal作为系统argv[1] .
这里我要列出laalwords_list的所有排列。这个单词表可能包含数千个单词。请告诉我最有效的方法。我不想使用sortedcollections.Counter方法。在


Tags: 方法import列表eggsys单词listwords
3条回答

如果我对你的问题理解正确,类似这样的东西会向你展示所有包含你测试词中每个字母的字符串:

words_list = [ ... whatever ... ]
word = sys.argv[1]

def contains_all(x, y):
  for ch in x:
    if not ch in y:
      return False
  return True

[x for x in words_list if contains_all(word, x)]

这将在给定的示例中给出['llaa', 'lala', 'alal', 'aall']。。。在

它的效率并不高——特别是,排序和不求证word会减少需要进行的比较的数量。一种方法就是用单词来做一套。在

你的问题的另一种解读可能是,你想找到所有的单词,这些单词是给定单词的排列,例如,与上面相同的结果,但是像lalafoo这样的单词不匹配,因为它包含的字母不在测试字符串中。然而,你的问题有点模糊,你到底想要什么。在

只使用python和list是没有“高效”的方法的。这将永远是一个O(n)算法。在

您只需:

import sys

words_list=['llaa','lala','alal','aall','abcd','egg','adore', ...]
search_word=sys.argv[1]
for word in words_list
    if search_word in word:
        print word

编辑

我现在要的是每一个字母的号码,包括你的号码。在

首先将argv[1]放入一个列表中,然后对其进行排序,这样就不必每次都对其进行排序。这样可以避免使用sorted

ARG = list(sys.argv[1])
ARG.sort()

然后定义一个函数来确定单词是否匹配:

^{pr2}$

最后,列表理解会过滤掉不匹配的单词,只留下匹配的单词:

[w for w in words_list if anagram_match(w)]

早先的回应:

我会用列表理解:

[w for w in words_list if sys.argv[1] in w]

如果您想检查单词中是否有字母,请检查是否存在集合交集:

[w for w in words_list if set(sys.argv[1]).intersection(w)]

相关问题 更多 >