【问题标题】:I want to turn words into codes using lists我想用列表把单词变成代码
【发布时间】:2014-04-02 21:47:00
【问题描述】:

正如标题所说,我想基本上创建一个使用列表的代码生成器。我目前正在做的是尝试用 1 个单词小规模地做。

letterlist = ['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']
primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101]

name = 'robert'
ii=0
nn = list(name)
code=1
while ii<=len(name)-1:
    for nn in letterlist:
        code *= zip(letterlist,primes)[1]
    ii+=1
print 'robert has a code equal to %f' %code

但我得到 TypeError: can't multiply sequence by non-int of type 'tuple'

而不是

robert has a code equal to 409760241

所以现在我使用了一本字典,它大部分时间都在工作,但我得到了错误

keyerror: '%'

【问题讨论】:

  • 为什么不制作映射字典?
  • @Edgar Arousiounian,因为我试过了,但没能成功,有人告诉我,因为我们还没有学过字典,所以我有可能会失分

标签: python list for-loop while-loop


【解决方案1】:

您可以制作 dict 并使用 reduce 进行乘法:

>>> d = dict(zip(letterlist, primes))
>>> d
{'a': 2, 'c': 5, 'b': 3, 'e': 11, 'd': 7, 'g': 17, 'f': 13, 'i': 23, 'h': 19,
 'k': 31, 'j': 29, 'm': 41, 'l': 37, 'o': 47, 'n': 43, 'q': 59, 'p': 53, 's': 67,
 'r': 61, 'u': 73, 't': 71, 'w': 83, 'v': 79, 'y': 97, 'x': 89, 'z': 101}

>>> reduce(lambda i, p: i*p, [d[c] for c in name])
409760241

【讨论】:

  • 感谢您的帮助,但 jonrsharpe 发布的正是我所需要的,因为我不应该使用字典。
【解决方案2】:

你的问题有三个:

  1. 无论当前字符如何,您始终使用zipped 列表中的1th 项;
  2. 每个项目都是一个二元组(str , int);和
  3. 您对letterlist 中的每个字符执行一次此操作(从不实际使用您的索引ii)。

相反,对于name 中的每个字母,使用一个列表的索引来访问另一个列表:

code = 1
for c in name:
    code *= primes[letterlist.index(c)]

【讨论】:

  • 感谢您的回复,但我想知道这将能够以何种速度计算大约 16,000 个单词的代码
  • 您需要多快才能做到这一点?搜索letterlistO(n)。如果速度很重要,字典方法会更快 (O(1))。
  • 一分钟内,但我离开了 5 分钟,什么也没有
  • 应该不会花那么长时间。在一个字上测试代码功能,然后用较小的集合测试通过这些字起作用的位。
  • 我做到了,我试了 30 个字,结果很好。我的教授说我可以使用字典而不会丢失分数。哪个更容易应用,但我得到 KeyError: '%'
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
相关资源
最近更新 更多