在Python中使用串联列表理解

2024-05-14 16:56:32 发布

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

目前我有一个替换字母表中特定字母的列表。字母a替换为第一个索引处的任何值,b替换为第二个索引处的任何值,依此类推。你知道吗

我欣赏Python的一个特性是能够执行列表理解。然而,当我尝试用连接执行此操作时,并没有得到积极的结果。你知道吗

letters = ["ka","zu","mi","te","ku","lu","ji","ri","ki","zu","me","ta","rin","to","mo",
           "no","ke","shi","ari","chi","do","ru","mei","na","fu","zi"]

def nameToNinja(str):
    name = ""
    for i in str:
        i=i.lower()
        if ord(i) >= 97 and ord(i) <= 122:
            name+= letters[ord(i.lower()) - 97]
        else:
            name += i
    return name


name = "Obama"
print("Your ninja name is: {0}".format(nameToNinja(name)))

我在Python中将函数转换为列表理解的尝试不起作用。事实上,我收到的唯一错误是Syntax Error。你知道吗

尝试:

def nameToNinja(str):
    return ''.join([letters[ord(i.lower()) - 97] if ord(i.lower()) >= 97 and ord(i.lower()) <= 122 else i 
    for i in str)

将原始函数缩短为串联列表的正确方法是什么。


Tags: andnamein列表forifdef字母
3条回答

每个字母只调用.lower()

def name_to_ninja(s):
    return ''.join(letters[ord(x) - 97] if ord(x) >= 97 and ord(x) <= 122 else x 
                   for x in (y.lower() for y in s))
name = "Obama"
print("Your ninja name is: {0}".format(name_to_ninja(name)))

输出:

Your ninja name is: mozukarinka
letters = ["ka","zu","mi","te","ku","lu","ji","ri","ki","zu","me","ta","rin","to","mo","no","ke","shi","ari","chi","do","ru","mei","na","fu","zi"]

name = "Obama"

ninja_name = ''.join(
        [letters[ord(i)-ord('a')] if i.islower() else i for i in name]
        )

print("Name:", name, "Ninjaname:", ninja_name)
letters = ["ka","zu","mi","te","ku","lu","ji","ri","ki","zu","me","ta","rin","to","mo","no","ke","shi","ari","chi","do","ru","mei","na","fu","zi"]

def nameToNinja(str):
    return ''.join([letters[ord(i.lower()) - 97] if (97 <= ord(i.lower()) <= 122) else i.lower() for i in str])

name = "Obama"
print("Your ninja name is: {0}".format(nameToNinja(name)))

相关问题 更多 >

    热门问题