2012-10-31 190 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