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

从包含另一个单词排列的python列表中找出单词,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我有一个包含各种单词的python列表。我必须使用sys.argv从命令行获取输入,并且必须从列表中找出所有置换词。 例如: import sys words_list=['llaa','lala','alal','aall','abcd','egg','adore', ...] word=sys.argv[1] 我输入laal作为sys.argv[1]。 在这里,我想从单词列表中列出laal的所有排列。这个单词列表可能包含数千个单词。请告诉我最有效的方法。我不想使用sorted或collec

我有一个包含各种单词的python列表。我必须使用sys.argv从命令行获取输入,并且必须从列表中找出所有置换词。 例如:

import sys
words_list=['llaa','lala','alal','aall','abcd','egg','adore', ...]
word=sys.argv[1]
我输入laal作为sys.argv[1]。
在这里,我想从单词列表中列出laal的所有排列。这个单词列表可能包含数千个单词。请告诉我最有效的方法。我不想使用sorted或collections.Counter方法

仅使用python和列表没有有效的方法。这将始终是一个关于算法的问题

您可以简单地执行以下操作:

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]放入一个列表中,然后对其进行排序,这样就不必每次都对其进行排序。这样可以避免使用排序的:

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

def anagram_match(w):
    w = list('w')
    w.sort()
    return w == ARG
最后,列表理解将过滤掉不匹配的单词,只留下符合以下条件的单词:

[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)]

如果我没弄错你的问题,像这样的东西会显示所有包含测试单词中每个字母的字符串:

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']

它的效率并不可怕——特别是,对单词进行排序和非限定会减少需要进行比较的次数。用单词做一个集合是一种方法


对你的问题的另一种解读可能是,你想找到所有与给定单词排列相同的单词-例如,与上述结果相同,但类似lalafoo的内容不匹配,因为它包含测试字符串中不包含的字母。但是,您的问题对于您想要的内容有点含糊不清。

您可能应该对您的回复者进行评论,以便他们知道他们是否在帮助您。您说“哪个包含laal字符”是指以任何顺序还是特定顺序?i、 很明显,laal与laal匹配,但它与lala匹配吗?我的意思是说,使用字符laalIt可以生成的所有单词将返回包含sys.argv子字符串的单词。我不想搜索子字符串,但要搜索完整的单词。就像lpease,它是正确的单词is please,saleep,asleep我想要的是,如果我输入单词lpease,它应该返回单词please,saleep,sleep,可以使用sys.argv[1]1.e中的字符形成lpease@SajidAhmad那么你应该重新回答你的问题,因为查找给定单词的排列的所有单词与从包含相同字符的列表中查找所有单词的字面解释有点不同-LALA包含laal中使用的相同字符,但这不是一个排列…我不希望laal只有四个字符可以组成laal,Lla,aall,alal。单词的长度应该相同,它将搜索单词中的子字符串。但是我想要所有可以使用sys.argv[1]的字符组合形成的单词。谢谢你的答复
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)]