Подтвердить что ты не робот

Как выполнить итерацию строки в Python?

В качестве примера скажем, я хотел бы перечислить частоту каждой буквы алфавита в строке. Каким будет самый простой способ сделать это?

Это пример того, о чем я думаю... вопрос заключается в том, как сделать allTheLetters равным указанным буквам без чего-то вроде allTheLetters = "abcdefg... xyz". На многих других языках я мог просто написать букву ++ и увеличить свой путь через алфавит, но до сих пор я не нашел способ сделать это в python.

def alphCount(text):
  lowerText = text.lower()
  for letter in allTheLetters:  
    print letter + ":", lowertext.count(letter)
4b9b3361

Ответ 1

Вопрос, который вы задали (как выполнить итерацию по алфавиту), - это не тот же вопрос, что и проблема, которую вы пытаетесь решить (как подсчитать частоту букв в строке).

Вы можете использовать string.lowercase, как предложили другие плакаты:

import string
allTheLetters = string.lowercase

Чтобы делать то, что вы привыкли, рассматривая буквы как цифры, вы можете использовать функции "ord" и "chr". Нет абсолютно никаких оснований делать это, но, возможно, это приближается к тому, что вы на самом деле пытаетесь выяснить:

def getAllTheLetters(begin='a', end='z'):
    beginNum = ord(begin)
    endNum = ord(end)
    for number in xrange(beginNum, endNum+1):
        yield chr(number)

Вы можете сказать, что все правильно, потому что этот код печатает True:

import string
print ''.join(getAllTheLetters()) == string.lowercase

Но, чтобы решить проблему, которую вы пытаетесь решить, вы хотите использовать словарь и собирать буквы по ходу:

from collections import defaultdict    
def letterOccurrances(string):
    frequencies = defaultdict(lambda: 0)
    for character in string:
        frequencies[character.lower()] += 1
    return frequencies

Используйте так:

occs = letterOccurrances("Hello, world!")
print occs['l']
print occs['h']

Это будет печатать "3" и "1" соответственно.

Обратите внимание, что это работает и для юникода:

# -*- coding: utf-8 -*-
occs = letterOccurrances(u"héĺĺó, ẃóŕĺd!")
print occs[u'l']
print occs[u'ĺ']

Если бы вы попытались использовать другой подход в юникоде (увеличивая каждый символ), вы бы долго ждали; есть миллионы символов юникода.

Чтобы реализовать свою оригинальную функцию (напечатайте подсчеты каждой буквы в алфавитном порядке) в терминах этого:

def alphCount(text):
    for character, count in sorted(letterOccurrances(text).iteritems()):
        print "%s: %s" % (character, count)

alphCount("hello, world!")

Ответ 2

возникает вопрос, как сделать allTheLetters, равный указанным буквам без чего-то вроде allTheLetters = "АБВГДЕЖ... хуг"

Фактически это обеспечивается строковым модулем, вам не нужно вручную вручную вводить его;)

import string

allTheLetters = string.ascii_lowercase

def alphCount(text):
  lowerText = text.lower()
  for letter in allTheLetters:  
    print letter + ":", lowertext.count(letter)

Ответ 3

Если вы просто хотите задать частоту строк строки, попробуйте следующее:

s = 'hi there'
f = {}

for c in s:
        f[c] = f.get(c, 0) + 1

print f

Ответ 4

Для подсчета объектов очевидным решением является Counter

from collections import Counter
import string

c = Counter()
for letter in text.lower():
    c[letter] += 1

for letter in string.lowercase:
    print("%s: %d" % (letter, c[letter]))

Ответ 5

Что-то вроде этого?

for letter in range(ord('a'), ord('z') + 1):
  print chr(letter) + ":", lowertext.count(chr(letter))

(я не говорю на Python, прошу простить мои синтаксические ошибки)

Ответ 6

Вы имеете в виду использование:

import string
string.ascii_lowercase

то

counters = dict()
for letter in string.ascii_lowercase:
    counters[letter] = lowertext.count(letter)

Все строчные буквы учитываются, отсутствующие счетчики будут иметь нулевое значение.

с использованием генераторов:

counters = 
    dict( (letter,lowertext.count(letter)) for letter in string.ascii_lowercase )

Ответ 7

Основной вопрос: "итерация по алфавиту":

import string
for c in string.lowercase:
    print c

Как получить частоты букв с некоторой эффективностью и без учета небуквенных символов:

import string

sample = "Hello there, this is a test!"
letter_freq = dict((c,0) for c in string.lowercase)

for c in [c for c in sample.lower() if c.isalpha()]:
    letter_freq[c] += 1

print letter_freq

Ответ 8

Как насчет того, чтобы использовать буквы, цифры и пунктуацию (все используемые для создания ключа Django):

import random
import string

chars = string.letters + string.digits + string.punctuation
chars_len = len(chars)
n = 40

print(''.join([chars[random.randint(0, chars_len)] for i in range(n)]))

Результат: coOL: V! D + P, & S * hzbO {a0_6] 2! {4 | OIbVuAbq0:

Ответ 9

Просто используйте:

import string
string.lowercase  
string.uppercase

или

string.letters[:26]  
string.letters[26:]

Ответ 10

Это то, что я делаю:

import string
for x in list(string.lowercase):
    print x