2014-04-20 112 views
0

字符串包含如果我有以下特定字符

name="paula" 

list=["l", "p"] 

for x in list: 
    print name.count(x) 

>>> 
1 
1 

其中,如果我理解正確的,走的是字符串:"paula"並確認它有一個"l"和一個"p"字符。

但如果我想這樣做的:

#**if name has both Letters, l and p, then it is a mouse** 

name="paula" 

list_1=["l"] 
list_2=["p"] 
list_3=["l", "p"] 

for y in list_3: 
    if name.count(y): 

    print "%s contains the letters %s and %s. %s is a mouse." % (name,w,x,name) 

#assume w and x are already defined 


>>> 

paula contains the letters l and p. paula is a mouse. 
paula contains the letters l and p. paula is a mouse. 

顯然,這是行不通的。我意識到在這段代碼中,它將檢查字符串"paula"的字母"l"。然後它再次運行以查看它是否包含"p"。因此兩個輸出而不是一個。

我相信for循環可能需要被丟棄。

任何幫助表示讚賞的傢伙!

@兩位Alchemist-原因3列出:

#cat, dog, mouse 
#if name contains the letter "L", then it is a cat 
#if name contains the Letter "P", then it is a dog 
#if Name has both Letters, L and P, then it is a mouse 
#if Name has no L or P, then loop the question 


name="lily" 
name_2="patrick" 
name_3="paula" 

list_1=["l"] 
list_2=["p"] 
list_3=["l", "p"] 


for w in list_1: 
    if name.count(w): 
     print "%s contains the letter %s. %s is a cat." %(name,w,name) 

for x in list_2: 
    if name_2.count(x): 
     print "%s contains the letter %s. %s is a dog." %(name_2,x,name_2) 

for y in list_3: 
    if name_3.count(y): 
     print "%s contains the letters %s and %s. %s is a mouse." %(name_3,w,x,name_3) 
+0

你的問題的下半部分是沒有意義的,並且使整個事情不清楚。爲什麼你突然想要3個列表?什麼是'y'?假定'w'和'x'被定義爲什麼? –

+0

我編輯了OP來澄清 – dyao

回答

3

我認爲最好的方法是使用套。

name = 'paula' 
seek = 'pl' 

if set(seek).issubset(set(name)): 
    print "{0} contains the letters '{1}'. {0} is a mouse.".format(name, seek) 

>>> paula contains the letters 'pl'. paula is a mouse. 
+0

+1,但請注意'set(seek).issubset(set(name))'可以被簡化爲'set(seek)。issubset(name)'因爲'issubset'與任何可迭代的工作 – iruvar

+0

我沒有意識到這一點。謝謝。 – dmcauslan

3

如果我理解正確,你想檢查一個字符串列表是否可以在另一個字符串中找到?

如果是這樣,你可以做這樣的事情:

list3 = ["l", "p"] 
name = "paula" 
if all(char in name for char in list3): 
    print "{0} is a mouse.".format(name) 

從本質上講,如何代碼工作是,它使用一臺發電機與「所有」操作相結合。

代碼段char in name for char in list3將遍歷list3中的每個項目,並且將報告真或假值,而不管該字符是否存在於名稱內。這種語法稱爲生成器理解,與列表解析非常相似,您可以瞭解更多關於here的信息。

簡而言之,char in name for char in list3是做類似下面的內容:

temp = [] 
for char in list3: 
    temp.append(char in name) 
print temp 

>>> [True, True] 

接下來,all功能是內置的是需要的bool的列表,並返回True只有當列表中的每個元素也是True

綜合考慮,只有當列表中的每個字符都可以在name的內部找到時,表達式all(char in name for char in list3)纔會評估爲True

+0

如果你真的需要三個列表,請不要將它們命名爲'list1','list2',...'listN'。只需使用列表清單,或個性化標識符名稱即可。 –

+0

@雙位煉金術士你能詳細說明一下嗎? – dyao

+0

什麼部分不清楚? –

1

使用any()檢查字符串中存在列表的內容:

name = "paula" 
list_1 = ["l", "p"] 
if any(word in name for word in list_1): 
    print 'paula is a mouse' 
相關問題