在python中搜索列表中的子字符串

时间:2016-01-15 00:36:55

标签: python list search substring

我需要知道字母b(最好是大写和小写)是否包含在列表中。

我的代码:

List1=['apple', 'banana', 'Baboon', 'Charlie']
if 'b' in List1 or 'B' in List1:
    count_low = List1.count('b')
    count_high = List1.count('B')
    count_total = count_low + count_high   
    print "The letter b appears:", count_total, "times."
else:
    print "it did not work"

4 个答案:

答案 0 :(得分:1)

您需要循环浏览列表并浏览每个项目,如下所示:

mycount = 0
for item in List1:
    mycount = mycount + item.lower().count('b')

if mycount == 0:
    print "It did not work"
else:
    print "The letter b appears:", mycount, "times"

由于您尝试在列表中计算“b”而不是每个字符串,因此您的代码无效。

或者作为列表理解:

mycount = sum(item.lower().count('b') for item in List1)

答案 1 :(得分:0)

所以问题是为什么这不起作用?

你的清单包含一个大字符串,"苹果,香蕉,狒狒,查理"。

在元素之间添加单引号。

答案 2 :(得分:0)

根据您的最新评论,代码可以重写为:

count_total="".join(List1).lower().count('b')
if count_total:
   print "The letter b appears:", count_total, "times."
else:
   print "it did not work"

你基本上加入列表中的所有字符串,然后创建一个长字符串,然后小写它(因为你不关心大小写)并搜索小写字母(b)。对count_total的测试有效,因为如果不是零则它会变为True。

答案 3 :(得分:0)

生成器表达式(element.lower().count('b') for element in List1)生成每个元素的长度。将其传递给sum()即可将其添加。

List1 = ['apple', 'banana', 'Baboon', 'Charlie']
num_times = sum(element.lower().count('b')
                for element in List1)
time_plural = "time" if num_times == 1 else "times"
print("b occurs %d %s"
      % (num_times, time_plural))

输出:

b occurs 3 times

如果您想要列表中每个元素的计数,请改用列表推导。然后,您可以print此列表或将其传递给sum()

List1 = ['apple', 'banana', 'Baboon', 'Charlie']
num_times = [element.lower().count('b')
             for element in List1]
print("Occurrences of b:")
print(num_times)
print("Total: %s" % sum(b))

输出:

Occurrences of b:
[0, 1, 2, 0]
Total: 3