Python列表比较

时间:2012-10-31 21:02:50

标签: python python-3.x

我在完成家庭作业时遇到困难。我正在尝试确定单词列表中是否包含单词列表。

例如:

([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], ['ANT', 'BOX', 'SOB', 'TO'])

我正在尝试确定其他两个列表中的单词列表的次数。 (它应该返回3)('ANT',“SOB'和'TO')

第一个列表最终会显示如下:(是的,它会读取列和行中的单词)

ANTT
XSOB

稍后会有两个以上的名单。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以从行和列生成字符串:

In [1]: data = ([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], ['ANT', 'BOX', 'SOB', 'TO'])

In [2]: rows = [''.join(s) for s in data[0]]

In [3]: rows
Out[3]: ['ANTT', 'XSOB']

In [4]: cols = [''.join(s) for s in zip(*data[0])]

In [5]: cols
Out[5]: ['AX', 'NS', 'TO', 'TB']

然后检查这些字符串中的单词:

In [6]: for word in data[1]:
    if any(word in s for s in rows+cols):
        print word # you can increment your counter here as well
   ...:         
ANT
SOB
TO

答案 1 :(得分:0)

由于这是一项家庭作业,让我解释必须发生的事情。在上面的代码中,如果我的Python正确,你有一个列表列表。因此,您要做的第一件事是根据单个字符列表构建您要查找的单词。例如,您的['A','N','T']列表需要生成一个ANT的单词。现在,一旦你找到了你想要的单词,你必须检查完成的单词列表。在上面的示例中,这将是最终的列表元素。因此,您可以使用newWords列表并迭代它,看它是否包含在originalList的最后一个元素中。如果发现foundWords计数器增加1。

答案 2 :(得分:0)

类似的东西:使用all()

In [73]: lis1
Out[73]: [['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']]

In [74]: lis2
Out[74]: ['ANT', 'BOX', 'SOB', 'TO']

In [75]: [x for x in lis2 if (any(x in "".join(y) for y in lis1) or any(x in "".join(k) for k in zip(*lis1)))]
Out[75]: ['ANT', 'SOB', 'TO']