2012-10-31 153 views
-1

我有一个家庭作业的任务有困难。我试图确定一个单词列表是否包含在一个字符列表中。Python的列表比较

例如:

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

我试图确定的单词列表有多少次是在其他两个列表。 (它应该返回3)(“蚁族”,“SOB”和‘TO’)

第一个名单将最终被显示如下:(是的,它读取两列字和行)

ANTT 
XSOB 

有稍后将两个以上的列表。

我怎么去呢?

+1

转换所有的话'set's和公正比较它们。 'set('hello')== set('elho')' – Blender

+0

这会错过任何有重复字母的东西... –

+0

OP需要检查哪些单词在表格的行和列中;我不明白如何制作集锦和失去订单会有所帮助。 –

回答

0

既然是家庭作业让我解释必须发生什么。在你的代码你上面有一个列表的列表如果我的Python是正确的,那么你需要做的第一件事就是构建你正在寻找的单词基于单个字符的列表。例如,['A','N','T']的列表将需要产生一个字ANT。现在,一旦你有你正在寻找的话,你必须检查完整的单词列表。在上面的例子中,这将是最终的列表元素。所以你把你的newWords列表并遍历它,看它是否包含在originalList的最后一个元素中。如果发现将foundWords计数器增加1。

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

它是功课,这似乎没有一点先进? – Woot4Moo

+0

我不认为它回答OP的问题。 –

+0

@LevLevitsky你是对的,我误解了这个问题。更新了解决方案。 –

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