2016-01-15 70 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" 

,因爲你想在列表中算「B」,而不是每個字符串的代碼不工作。

或列表的理解:根據您的最新評論

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