仅打印包含特定字符的列表项

时间:2015-09-16 03:53:42

标签: python list python-3.4

如果字符串以某个字符开头并且它通过字符串重复,我试图将计数递增1。这是我的代码

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 

3 个答案:

答案 0 :(得分:1)

在您的代码中,您使用 "[ ... ]" 。这会导致您的问题。

if char == list1[i][:]list1[i][:]相同,这实际上不是您尝试做的事情。您不希望看到list1[i]list1[i];相反,您想知道char 是否包含 list1[i]。你可以通过很多方式实现这一目标。这是三个:

  1. char
  2. 这个for-loop:
  3. char in list1[i]
    1. found = False for c in list1[i]: if c == char: found = True break
    2. 无论如何,这就是我要做的事情:

      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