def stringMatch(list1, char):
count = 0
for i in range(len(list1)):
if char == list1[i][:]:
count = count + 1
print(list1[i], count)
输入list1 = ['cat', 'dog', 'corn']
和char = 'c'
输出应为
cat 1
corn 1
答案 0 :(得分:1)
在您的代码中,您使用 "[ ... ]"
。这会导致您的问题。
if char == list1[i][:]
与list1[i][:]
相同,这实际上不是您尝试做的事情。您不希望看到list1[i]
是list1[i]
;相反,您想知道char
是否包含 list1[i]
。你可以通过很多方式实现这一目标。这是三个:
char
char in list1[i]
found = False
for c in list1[i]:
if c == char:
found = True
break
无论如何,这就是我要做的事情:
if any(char==c for c in list1[i])
答案 1 :(得分:1)
在python中计算字符串中的字符非常容易。有一个内置的计数功能:string.count(char)
。您当前的计数方法不起作用有两个原因。
检查字母是否在字符串中的方式不起作用。让我们试一下测试用例:
>>>'c' == 'cat'[:]
False
使用这种方法,你基本上是在询问是否' c'等于整个字符串,这显然是错误的。更好的方法是使用in
关键字。让我们尝试前面的例子。
>>>'c' in 'cat'
True
因此,如果我们要使用此方法,我们将使用更多pythonic in
关键字。但是,我们不需要它。
假设我们使用上述方法(如上所述,我们赢了),您的输出仍然会出错。根据你想要的输出,我们希望计算每个单词中的字符,是吗?但是,每次对该字符进行计数时,您当前如何设置它会增加总计数变量。所以你的输出将是:
cat 1
corn 2
这是一个简单的解决方法。我们只需要在for循环中移动变量,这样它就会在每次递增时重置。它看起来像这样:
for i in list1:
total = 0
if char in i:
total += 1
print(i, total)
然而,即便如此,它还不是一个准确的循环,因为我们想要计算每个单词中的字符,对吗?这个(和你自己的方法)只计算单词中是否存在字符。具有讽刺意味的是,此解决方案中不会出现in
关键字。相反,我们需要计算每个单词的每个字母来解决这个问题。这是您的新代码:
for word in list1:
total = 0
for letter in word:
if letter == char:
total += 1
print(word, total)
好吧,就像我在开头所说的那样,还有一种更简单的方法。使用string.count()
函数,代码现在是整个函数的四行。注意,我改变了你的功能名称。按照惯例,在python中不鼓励使用camelCase,而小写/下划线是惯例。请务必阅读PEP 8, python's style-guide,以了解惯例。无论如何,这是你的代码:
def string_match(list1, char):
for i in list1:
if i.count(char) > 0:
print(i, i.count(char))
答案 2 :(得分:0)
您只需使用string.count()
。
>>> a = list1 = ['cat', 'dog', 'corn']
>>> a = { i:i.count('c') for i in list1 if i.count('c') > 0}
>>> for w in a:
... print w, a[w]
...
corn 1
cat 1