2014-04-20 111 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' 
相关问题