2016-11-12 2 views
0

Это на самом деле строка, но я просто преобразовал ее в список, потому что ответ должен быть возвращен как список. Я рассматриваю эту проблему часами и не могу ее получить. Я должен взять строку, например «у Мэри был маленький ягненок», например, и другая строка, такая как «ab», например, и поиск по строке1, если произошла какая-либо из строк из строки2. Так что, если все сделано правильно с двух примера вернуть бы [ "а = 4", "Ь = 1"]Что было бы самым простым способом поиска по списку?

меня это до сих пор:

def problem3(myString, charString): 
    myList = list(myString) 
    charList = list(charString) 
    count = 0 
    newList = [] 
    newString = "" 
    for i in range(0,len(myList)): 
     for j in range(0,len(charList)): 
      if charList[j] == myList[i]: 
       count = count + 1 
       newString = charList[j] + "=" + str(count) 
    newList.append(newString) 
    return newList 

Который возвращает [а = 5] I знаете, что-то с помощью newList.append (строка), и где он должен быть размещен, у кого есть предложения?

+0

Вам нужен еще один внутренний цикл – antlersoft

+0

Используйте словарь для отслеживания отсчетов для каждого символа , –

+0

Куда бы проходила внутренняя петля? –

ответ

1

Вы можете сделать это очень легко с списковыми и count функцией этой строки (и списками!) Есть:

  1. Разделить строку поиска в список символов.
  2. Для каждого символа в строке поиска проведите цикл над входной строкой и определите, сколько это происходит (через count).

Пример:

string = 'Mary had a little lamb' 
search_string = 'ab' 
search_string_chars = [char for char in search_string] 
result = [] 
for char in search_string_chars: 
    result.append('%s=%d' % (char, string.count(char))) 

Результат:

['a=4', 'b=1'] 

Обратите внимание, что вам не нужно разделить search_string ('Ab') в список символов, а строки уже списки символов - выше было сделано таким образом, чтобы проиллюстрировать концепцию. Следовательно, приведенная версия выше, может быть (что также дает тот же результат):

string = 'Mary had a little lamb' 
search_string = 'ab' 
result = [] 
for char in search_string: 
    result.append('%s=%d' % (char, string.count(char))) 
+0

Похож на хороший способ, но я должен использовать итерацию цикла, а не count/search –

+0

@jaymoney: Я вижу. На самом деле функция 'count' инкапсулирует этот бит кода, где одна петля над строкой, чтобы найти соответствующий символ, и может быть восстановлена ​​/ реализована с простым python по желанию. Я реализовал его как таковой, поскольку ваша текущая итерация вопроса не затрагивает эту проблему. – jrd1

0

Вот возможное решение с использованием счетчика, как упомянуто кодером,

from collections import Counter 
s = "Mary had a little lambzzz" 

cntr = Counter(s) 
test_str = "abxyzzz" 

results = [] 
for letter in test_str: 
    if letter in s: 
     occurrances = letter + "=" + str(cntr.get(letter)) 
    else: 
     occurrances = letter + "=" + "0" 

    if occurrances not in results: 
     results.append(occurrances) 


print(results) 

выход

['a=4', 'b=1', 'x=0', 'y=1', 'z=3'] 
+2

Почему 'if letter in s:'? Возврат 'z = 0' является подходящим ответом. Также 'cntr [letter]' будет достаточно (и это уже 'str'). – AChampion

+0

Да, вы правы, я сделал обновление для ответа! Спасибо, что заметили это. – chatton

+0

Вы сделали это более сложным, чем необходимо 'cntr [letter]' уже возвращает '0' для ключей, которых не существует, поэтому вы можете полностью исключить условие' if'. – AChampion

0
import collections 

def count_chars(s, chars): 
    counter = collections.Counter(s) 
    return ['{}={}'.format(char, counter[char]) for char in set(chars)] 

Это все. Пусть Counter выполняют работу по фактическому подсчету символов в строке. Затем создайте представление списка строк формата, используя символы в chars. (chars должен быть набором, а не списком, чтобы, если в chars есть повторяющиеся символы, на выходе будет отображаться только один.)

+0

. В отношении вашего предложенного редактирования на [этот ответ] (http://stackoverflow.com/a/27251855/5211833), пожалуйста воздерживаться от добавления кода из более новых методов в существующие ответы. Вы отправляете свой собственный ответ или пишите автору ответа с предлагаемым новым решением. Для полной ссылки на meta on do и don'ts при редактировании особого кода [см. Соответствующую мета-страницу] (http://meta.stackoverflow.com/questions/260245/when-should-i-make-edits-to- код). Если вам нужна дополнительная информация, пожалуйста, поговорите с нами в чате [SOCVR chatroom] (http://chat.stackoverflow.com/rooms/41570/so-close-vote-reviewers). – Adriaan

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