Я пытаюсь узнать, сколько пакетов «1» есть в строке, которая будет состоять только из 1 и 0.
For example,
For
1011011, the number bundles of '1' will be3since bundles are1,11,11excepting0s.For
11101110101, it will be4as well since the bundles are111,111,1,1.
Есть ли какой-нибудь Pythonic и краткий способ решения этой проблемы?
@PriteshThaker Спасибо за исправление :) Я отредактировал :)






Это легко.
import re
string = "11101110101"
bundles = re.findall(r'1+',string)
Используйте жадный поиск для поиска самой длинной последовательности 1's. Теперь re.findall жадно просматривает всю строку и возвращает список. Этот список будет содержать все вхождения 1, которые содержат группы 1.
Если вы хотите напечатать общее количество пакетов, используйте это:
print(len(bundles))
Выход: 4
вот как вы это делаете. разделите строку на 0, а затем удалите пустые элементы из возвращаемого списка, а затем напечатайте длину списка
string = '0000'
x = string.split('0')
while "" in x:
x.remove('')
print(len(x))
другой подход будет использовать понимание цикла для удаления пустого.
string = '0000'
x = string.split('0')
x = [y for y in x if y != ""]
print(len(x))
Самый простой способ (напечатать) таков:
s = "11101110101"
print( zip("0"+s,s).count( ('0','1') ) )
Объяснить, почему это работает, немного сложнее, но это хорошая практика для программирования в целом. Каждая из связок единиц начинается с подстроки «01», за исключением случая, когда строка начинается с единицы. Если вы считаете только эти пары смежных символов, то вы точно считаете пакеты.
Сжатие строки со смещением строки на единицу даст все пары символов, например.
>>> s = "111001101011"
>>> print( zip(s,s[1:]) )
[('1', '1'), ('1', '1'), ('1', '0'), ('0', '0'), ('0', '1'), ('1', '1'), ('1', '0'), ('0', '1'), ('1', '0'), ('0', '1'), ('1', '1')]
Все, что осталось сделать, это исправить угловой регистр, где он может начинаться с «1», добавив дополнительный «0» к началу.
Наслаждаться.
Строка, которая будет состоять только из 1 и 0
s = raw_input("Enter: ")
print(len([i for i in s.split("0") if i! = ""]))
Что делать, если в строке повторяются нули? Например. 10110011
Теперь проверьте мой отправленный код еще раз и сообщите мне, если вы обнаружите какой-либо неудачный тестовый пример.
в последнем примере не будет ли это 4?