В C ++ я могу перебрать std::string
подобное:
std::string str = "Hello World!";
for (int i = 0; i < str.length(); ++i)
{
std::cout << str[i] << std::endl;
}
Как мне перебрать строку в Python?
Как отметил Йоханнес,
for c in "string":
#do something with c
Вы можете перебрать почти все в Python, используя for loop
конструкцию,
например, open("file.txt")
возвращает объект файла (и открывает файл), повторяя его итерируя по строкам в этом файле
with open(filename) as f:
for line in f:
# do something with line
Если это похоже на магию, ну, в общем-то, так и есть, но идея, стоящая за этим, очень проста.
Существует простой протокол итератора, который можно применить к любому объекту, чтобы for
цикл работал на нем.
Просто реализуйте итератор, который определяет next()
метод, и реализуйте __iter__
метод в классе, чтобы сделать его итеративным. ( __iter__
конечно, должен возвращать объект итератора, то есть объект, который определяет next()
)
Если вам нужен доступ к индексу во время итерации по строке, используйте
enumerate()
:источник
1 t
,2 e
,3 s
,4 t
используйте параметр «Пуск»:for i, c in enumerate('test', start=1)
Еще проще:
источник
for c in "test": print (c)
почему?Просто чтобы дать более полный ответ, способ итерации по строке в C может применяться в Python, если вы действительно хотите вбить квадратный колышек в круглое отверстие.
Но опять же, зачем это делать, когда строки по своей природе итеративны?
источник
for i in range(len(...))
это зло В python 2.xrange()
создается список, поэтому для очень большой длины вы можете выделить очень большой блок памяти. По крайней мере, использоватьxrange()
в этих случаях. Кроме того, повторное индексирование одной и той же строки намного медленнее, чем итерация непосредственно по строке. Если вам нужен индекс, используйтеenumerate()
.Ну, вы также можете сделать что-то интересное, как это и сделать свою работу с помощью цикла for
Ответ
Г-н . Сурия
Однако, так как range () создает список значений, который является последовательностью, таким образом, вы можете напрямую использовать имя
Это также дает тот же результат, а также выглядит лучше и работает с любой последовательностью, такой как список, кортеж и словарь.
Мы использовали буксировку встроенных функций (BIFs в Python Community)
1) range () - range () BIF используется для создания индексов. Пример
2) len () - len () BIF используется для определения длины заданной строки
источник
Если вы хотите использовать более функциональный подход к итерации по строке (возможно, для ее преобразования), вы можете разбить строку на символы, применить функцию к каждому из них, а затем соединить полученный список символов обратно в строку.
Строка по своей сути является списком символов, поэтому «map» будет перебирать строку - как второй аргумент - применяя функцию - первый аргумент - к каждому.
Например, здесь я использую простой лямбда-подход, поскольку все, что я хочу сделать, - это тривиальное изменение символа: здесь, чтобы увеличить значение каждого символа:
или в целом:
где my_function принимает значение char и возвращает значение char.
источник
Здесь используют несколько ответов
range
.xrange
обычно лучше, поскольку он возвращает генератор, а не полностью созданный список. Там, где память и / или итерации широко варьируемой длины могут быть проблемой,xrange
лучше.источник
Если вы когда-либо сталкивались с ситуацией, когда вам это нужно
get the next char of the word using __next__()
, не забудьте создатьstring_iterator
и выполнить итерацию, а неoriginal string (it does not have the __next__() method)
В этом примере, когда я нахожу символ =,
[
я продолжаю искать следующее слово, пока не нахожу]
, поэтому мне нужно использовать __next__здесь цикл по строке не поможет
источник