1

(如果您有更好的标题,请进行编辑,我无法正确解释!:) 所以这是我的代码:

with open('cipher.txt') as f:
    f = f.read().replace(' ', '')

new = []
let = []
for i in f:
    let.append(i)
    if i.count(i) > 1:
        i.count(i) == 1
    else:
        new = sorted([i + ' ' + str(f.count(i)) for i in f])
for o in new:
  print(o)

这是cipher.txt

xli uymgo fvsar jsb

我应该打印出使用的字母和使用了多少次,我的代码有效,但我需要它按字母顺序排列,我尝试将它们放在一个列表中list(a)然后对它们进行排序,但我不太明白,任何想法?提前致谢!

4

2 回答 2

3

每当处理计数时,您可以collections.Counter在这里使用:

>>> from collections import Counter
>>> print sorted(Counter('xli uymgo fvsar jsb'.replace(' ', '')).most_common())
[('a', 1), ('b', 1), ('f', 1), ('g', 1), ('i', 1), ('j', 1), ('l', 1), ('m', 1), ('o', 1), ('r', 1), ('s', 2), ('u', 1), ('v', 1), ('x', 1), ('y', 1)]

如果您无法导入任何模块,则可以附加a到列表然后对其进行排序:

new = []
for i in f:
    new.append(i + ' ' + str(f.count(i)) # Note that i is a string, so str() is unnecessary

或者,使用列表推导:

new = [i + ' ' + str(f.count(i)) for i in f]

最后,要对其进行排序,只需将其放在sorted()周围即可。不需要额外的参数,因为您的结果是按字母顺序排列的:)。

于 2013-09-02T08:05:28.847 回答
0

这是一个没有进口的oneliner:

{s[i]: n for i, n in enumerate(map(s.count, s))}

并按字母顺序(如果以上是d):

for k in sorted(d): print k, d[k]

或另一个版本(oneliner 按字母顺序):

sorted(set([(s[i], n) for i, n in enumerate(map(s.count, s))]))

于 2013-09-02T08:23:47.787 回答