2016-01-15 2 views
0

Мне нужно знать, состоит ли буква b (как в верхнем, так и в нижнем регистре) в списке.поиск подстроки в списке в python

Мой код:

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" 

ответ

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" 

Ваш код не работает, так как вы пытаетесь считать «Ъ» в списке вместо каждой строки ,

Или как список понимание:

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

Для учета верхнего и нижнего регистра я бы изменил инструкцию mycount, чтобы использовать 'item.lower(). Count ('b')' – sal

+0

@sal Хорошая идея. – TerryA

+0

Спасибо. Есть ли способ поиска в списке без поиска в каждой строке? – Robo

0

Таким образом, вопрос, почему это не работает?

Ваш список содержит одну большую строку: «яблоко, банан, бабуин, Чарли».

Добавить в одинарные кавычки между элементами.

+0

я редактировал, так что списки теперь содержит несколько ключей. Ошибка начинающих :). Однако он все еще не работает. – Robo

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, если не равен нулю.

+0

Хорошо работает и понятен. Спасибо за это. – Robo

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 

 Смежные вопросы

  • Нет связанных вопросов^_^