2010-11-04 72 views
3

可能重複:
How to find positions of the list maximum?如何查找Python列表中元素的索引?

從功課的問題: 德科幻定義一個函數censor(words,nasty)這需要一個單詞列表,並 替換所有出現討厭的截尾字的話,並且 返回單詞的審查列表。

>>> censor([’it’,’is’,’raining’], [’raining’]) 
[’it’,’is’,’CENSORED’] 

我看到的解決方案是這樣的:

  1. 找到nasty
  2. 指數與"CENSORED"

替換詞匹配指數 但我卡住上尋找索引。 。

+0

@mart:OP說它是作業。 – SilentGhost 2010-11-04 17:56:09

+0

@Silent:好的,很抱歉,如果是自願的。查看我評論中有關@ z4y4ts答案附帶的元標籤的鏈接。 – martineau 2010-11-04 18:37:14

+0

@martineau:好吧,作業不在該列表中,它看起來還活着並踢。我還應該指出,我深深鄙視那些來自我們公司業主的社會工程的錯誤嘗試。 – SilentGhost 2010-11-04 19:18:14

回答

0

其實你不必在這裏操作索引。只需遍歷words列表並檢查該單詞是否在nasty中列出。如果將'CENSORED'附加到結果列表中,請附加該單詞​​本身。

或者你也可以涉及list comprehensionconditional expression獲得更多的優雅版:

+2

爲其他人解決作業問題被認爲是非常不禮貌的行爲。它否定了學習的效果,對其他學生不公平,並導致了導師的失望。 – 2010-11-04 14:28:34

+0

哎呀,對不起,我以前沒見過這些作業問題。如果我刪除了代碼並只留下評論,這樣可以嗎? – z4y4ts 2010-11-04 14:35:02

+0

@Konrad Rudolph:鑑於meta標籤,如「家庭作業」,現在正在氣餒,這可能會變得更加困難 - 請參閱[* Meta標籤的死亡*](http://blog.stackoverflow.com/2010/08/在-死亡的,元標籤)。當然有權衡,但總的來說,我個人傾向於同意推理。 – martineau 2010-11-04 18:12:17

17

你可以通過使用.index方法找到list的任何元素的索引。

>>> l=['a','b','c'] 
>>> l.index('b') 
1 
+3

除非在列表中有兩個'b'的情況,在這種情況下,您只會得到第一個。這可能是這個問題的一個問題。 – philosodad 2010-11-04 17:15:13

+1

不能相信我必須一路向下滾動才能找到這個...... – Menasheh 2017-07-16 21:13:16

1

您的方法可能有效,但它不必要的複雜。

Python允許一個非常簡單的語法檢查東西是否包含在一個列表:

censor = [ 'bugger', 'nickle' ] 
word = 'bugger' 
if word in censor: print 'CENSORED' 

這種做法,簡單地走了你的話,測試每個詞無論是在censor名單列表。

要遍歷單詞列表,您可以使用for循環。既然你可能需要修改當前的單詞,使用索引,就像這樣:

for index in len(words)): 
    print index, words[index] 

現在,所有你需要做的就是把兩個代碼片段在一起。

+0

...然後通過將上面的O(#words *#nastywords)算法變成O(#words )。 :) – janneb 2010-11-04 14:07:43

+0

@janneb:當然有效?所有我能達到的預期(!)時間O(#words + #censor) - 通過將審查單詞列表轉換爲'set'。 – 2010-11-04 14:11:42

+0

嗯,是的,你是對的。我的觀點是,你可以通過使用指定的集合(或者對於較老的python版本的字典),將這個二次算法變成線性算法。 – janneb 2010-11-04 14:33:11

0

你可以使用方便的內置enumerate()功能的步驟通過在列表中的項目。例如:

def censor(words, nasty): 
    for i,word in enumerate(words): 
     if word... 
相關問題