如何使用python查找列表元素是字符串的子集

时间:2014-01-02 15:28:09

标签: python-2.7

我是一名分子生物学家,也是编程新手,所以请原谅我的语言。我正在使用python。

示例:

string = "gctatagcgttatatactagcctatagctata"

list = ["gtagctaggac", "mptalltruiworw", "12365478995", "nvncmvncmvncmvn"]

现在开始质疑了 我想知道一种可以发现

的方法
for element in list:
  if element is subset of string (in any order)
  return element

在上面的例子中,答案应该是

gtagctaggac

1 个答案:

答案 0 :(得分:0)

不是花时间生成排列,而是比较list元素和字符串中的字母数。请注意,此代码不会检查字符串中不在模式中的字母。

string = "gctatagcgttatatactagcctatagctata"
list = ["gtagctaggac", "mptalltruiworw", "12365478995", "nvncmvncmvncmvn"]

from collections import defaultdict

def count_letters(string):
    counts = defaultdict(int)
    for letter in string:
        counts[letter] += 1
    return counts

sc = count_letters(string)

for element in list:
    counts = count_letters(element)
    if all([sc[letter] >= counts[letter] for letter in counts]):
        print "Found", element

作为一种风格问题,最好不要使用“list”和“string”等内置类的名称。