Для l oop, который разбивает строки на n символов - PullRequest
0 голосов
/ 26 февраля 2020

Я нашел этот код, который делает именно то, что я хочу, он разбивает строку на n символов. Но может ли кто-нибудь объяснить мне, как этот код выглядит в длинной форме для l oop?

n = 3
chunks = [str[i:i+n] for i in range(0, len(str), n)]
print(chunks)

Мне трудно понять логику c этого кода в его текущем формате. Если бы я переписал его, он выглядел бы примерно так, как показано в приведенном ниже коде, но не смог бы воспроизвести результаты.

for i in range(0, len(str), n):
    chunks = ''
    string = str[i*n::n]
    chunks = chunks+string

Источник кода

Ответы [ 4 ]

3 голосов
/ 26 февраля 2020

Понимание списка, которое выглядит как

result = [value for element in iterable]

, в точности эквивалентно следующему коду:

result = []
for element in iterable:
    result.append(value)

Следовательно, ваш код будет просто

chunks = []
for i in range(0, len(str), n):
    chunks.append(str[i:i+n])
2 голосов
/ 26 февраля 2020
n = 3
inputString = "this is my string"
chunks = []
for i in range(0, len(inputString), n):
    myString = inputString[i:i+n]
    chunks.append(myString)
print(chunks)

Куски - это массив! Не строка Надеюсь, что это полезно!

1 голос
/ 26 февраля 2020

Структура простого понимания списка такова:

result = [ <some calculation on variable(s)> for <variable(s)> in <iterator> ]

В a для l oop это означает:

result = []
for <variable(s)> in <iterator>:
    result.append(<some calculation on variable(s)>)

В вашем случае str[i:i+n] is некоторые вычисления для переменной i , i - это , переменная и range(0, len(str), n) - это итератор

Каждая запись, создаваемая итератором range(0, len(str), n) помещается в переменную i, которая затем обрабатывается str[i:i+n] как новый элемент для результирующего списка.

Функция range() создает значения от начальной точки 0 до ( но не включая) конечную точку len(str) с шагом по значению шага n.

[] справа от str (очень плохое название для переменной между прочим, так как имя типа строки) выбирает диапазон символов, определенных так же, как для функции range (), но разделенных двоеточиями вместо запятых.

1 голос
/ 26 февраля 2020
chunks = []
for i in range(0, len(str), n):
    string = str[i:i+n]
    chunks.append(string)
...