将字符串转换为Python中的二进制表示

2024-09-28 19:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据单词的元音和辅音的内容为单词创建二进制值,其中元音的值为“0”,辅音的值为“1”。在

例如,“哈哈”表示为1010,哈哈表示为101010。在

common_words = ['haha', 'hahaha', 'aardvark', etc...]

dictify = {}

binary_value = []

#doesn't work
for word in common_words: 
    for x in word:
        if x=='a' or x=='e' or x=='i' or x=='o' or x=='u':
            binary_value.append(0)
            dictify[word]=binary_value
        else:
            binary_value.append(1)
            dictify[word]=binary_value

-因此,我在生成的字典中得到了太多的二进制数字:

^{pr2}$

期望输出:

>>>dictify
{'haha': 1010,'hahaha': 101010, 'aardvark': 00111011}

我在想一个解决方案,不涉及一个循环中的一个循环。。。在


Tags: orforvalue二进制common单词wordwords
3条回答

user2357112解释您的代码。还有一种方法:

>>> common_words = ['haha', 'hahaha', 'aardvark']
>>> def binfy(w):
        return "".join('0' if c in 'aeiouAEIOU' else '1' for c in w)

>>> dictify = {w:binfy(w) for w in common_words}
>>> dictify
{'aardvark': '00111011', 'haha': '1010', 'hahaha': '101010'}

这似乎是翻译表的工作。如果你能定义一个字符串的定义,那么你可以定义一个模糊的输入

# For simplicity's sake, I'm only using lowercase letters
from string import lowercase, maketrans
tt = maketrans(lowercase, '01110111011111011111011111')

上表的问题变得微不足道:

^{pr2}$

有了这个解决方案,您可以非常简单地构建dictify:

dictify = {word:word.translate(tt) for word in common_words} #python2.7
dictify = dict((word, word.translate(tt)) for word in common_words) # python 2.6 and earlier

*Python 3也可以这样做,但必须使用字节而不是字符串:

^{4}$

您发布的代码不起作用,因为所有单词共享相同的binary_value列表。(它也不起作用,因为number_valueeach从来没有定义过,但是我们假设这些变量称为binary_value和{}。)为每个单词定义一个新列表:

for word in common_words:
    binary_value = []
    for x in word:
        if x=='a' or x=='e' or x=='i' or x=='o' or x=='u':
            binary_value.append(0)
            dictify[word]=binary_value
        else:
            binary_value.append(1)
            dictify[word]=binary_value

如果您希望输出看起来像00111011,而不是一个列表,则需要生成一个字符串。(您可以生成一个int,但是它看起来像是59,而不是{}。Python不区分“this int is base2”或“this int有2个前导零”。)

^{pr2}$

相关问题 更多 >