Python字母表列表不正确

Python字母表列表不正确,python,list,for-loop,Python,List,For Loop,我有两个Python列表,其中包含整数average和avg。average的排序是倒序的。 字母表只是一个带有字母a-z的列表,最后一个元素是表示空格的空字符串。Average是文本文件的字母频率。我正试图找到一个替代密码来为我的研究工作 average = [1, 17, 11, 2, 0, 4, 0, 5, 2, 6, 0, 4, 1, 1, 3, 1, 3, 2, 1, 0, 6, 5, 0, 1, 0, 7, 5] alphabet = ['a', 'b', 'c', 'd', 'e'

我有两个Python列表,其中包含整数average和avg。average的排序是倒序的。 字母表只是一个带有字母a-z的列表,最后一个元素是表示空格的空字符串。Average是文本文件的字母频率。我正试图找到一个替代密码来为我的研究工作

average = [1, 17, 11, 2, 0, 4, 0, 5, 2, 6, 0, 4, 1, 1, 3, 1, 3, 2, 1, 0, 6, 5, 0, 1, 0, 7, 5]
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' ']

avg = average[:]
average.sort(reverse = True)

for x in range(27):
  for y in range(27):
    if average[x] == avg[y]:
      if y < 26:
        alphabet[x] = chr(97 + y) # ASCII a = 97 
      else:
        alphabet[x] = chr(32) # 32 = space

print(alphabet)
它通常应该是一个从a到z的列表,包含空格,但是 我找不到错误。。。
有人有提示吗?

如果您想轻松获得从a到z的列表,Python已经给了您一个提示:

>>> from string import ascii_lowercase
>>> alphabet = ascii_lowercase + ' '
>>> alphabet
'abcdefghijklmnopqrstuvwxyz '

我真的不明白你为什么期望从代码中得到完整的字母表。让我们看看对于单个值x会发生什么

所以x是0,这意味着我们要填补第一个位置。平均值为反向排序的平均值;avg是一个看似无关的数字列表。这就是x=0时的情况:

现在y=1明显小于26,所以第一种情况适用,在这种情况下,索引x=0处的字母表字符将是chr97+1。这显然不是您在输出中期望的a


对于其他x,这些情况也会发生类似的情况,只是当平均值[x]出现非唯一值时,情况会变得更加复杂。在这种情况下,字母字符会被多次覆盖。

好吧,我不知道你想用这段代码实现什么,但很容易就能找出为什么会得到这样的结果。只需逐步完成代码!排序后,您有以下内容:

average = [17, 11, 7, 6, 6, 5, 5, 5, 4, 4, 3, 3,
           2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
avg =     [1, 17, 11, 2, 0, 4, 0, 5, 2, 6, 0, 4,
           1, 1, 3, 1, 3, 2, 1, 0, 6, 5, 0, 1, 0, 7, 5]
现在,您的循环开始查看平均值[0],即17。使avg[y]==17的唯一索引是y=1。因此,您的代码可以:

 alphabet[x] = chr(97 + y) # ASCII a = 97
即:

 alphabet[0] = chr(97 + 1)
 alphabet[0] = chr(98)
 alphabet[0] = 'b'
即:

 alphabet[0] = chr(97 + 1)
 alphabet[0] = chr(98)
 alphabet[0] = 'b'
即:

 alphabet[0] = chr(97 + 1)
 alphabet[0] = chr(98)
 alphabet[0] = 'b'
然后,您完成了外部循环的第一次迭代,因此字母[0]==“b”是分配给字母[0]的最终值


诸如此类。我看不出有什么奇怪的地方——代码正在按照您的要求执行。

为了得到a-z,在反转和排序后,平均值需要与平均值相同,并且它们的所有值都必须是唯一的

要使字母表列表中的位置0等于“a”,您需要x,y对0,0

这意味着对于以下x,y对,平均值[x]==avg[y]必须为真:

给定您的代码,您可以期望得到的平均值a-z为:

average = [27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
总之

至于魔术最初是什么让这个循环产生了a-z,我怀疑现在的行是这样的:

if average[x] == avg[y]:
可能原意为:

if x == y:

在这种情况下,您可以向它抛出任何输入,它将愉快地生成所需的a-z。

您能告诉我们平均值和平均值列表是什么样子吗?您实际期望列表变成什么样子,以及如何使用该代码?平均值是[1,17,11,2,0,4,0,5,2,6,0,4,1,1,3,3,2,1,1,0,6,0,1,7,5]和平均值[17,11,7,6,6,5,5,4,4,3,3,2,2,1,1,1,1,0,0,0,0,0,0,0]我希望得到一个['a','b','c',…'y','z',']我正在学习媒体计算机科学,循环工作了一段时间,在某个点上它给出了疯狂的列表。嗨@JohnA!欢迎来到StackOverflow。我已经更改了你的帖子,显示了你所说的平均值、平均值和字母表的值,但是生成的代码并没有显示你所说的。你可以编辑和更新你自己的帖子,还有你你应该这样做,向我们展示你实际使用的值。@JohnA你的问题缺少的是为什么。至少有一个答案可以证明,有一些简单的方法可以将字母表作为字符列表。从这个问题很难看出为什么在字母表的末尾加上一个空格很重要et。