我如何“浓缩”这个代码?

2024-06-16 09:39:32 发布

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

我是python新手,所以我可能使用了不正确的术语,但是如何“压缩”这些代码呢?在

            for i in self.letterWord[0:1]:
                    if i == letter:
                            self.binaryWord[0] = 1

            for i in self.letterWord[1:2]:
                    if i == letter:
                            self.binaryWord[1] = 1

            for i in self.letterWord[2:3]:
                    if i == letter:
                            self.binaryWord[2] = 1

看起来像这样吗?在

^{pr2}$

我试着用上面的代码,但它总是说

local variable 'i' referenced before assignment

然后,当我输入global i时,它显示

global name 'i' not defined

嘿伙计们!谢谢你的回复!很抱歉提供了模糊的信息,谢谢你回答我的问题。在


Tags: 代码inselfforiflocalvariableglobal
3条回答

首先,您建议的代码使用i来表示两个不同的东西。如果有的话,应该是:

    for l in self.letterWord[i:i+1]:
        if l == letter:
            self.binaryWord[i]=1

但同时,自荐信[0:1]将只包含一个项:自荐信[0]。如果超出范围就什么都没有。所以你根本不需要这些for循环。在

^{pr2}$

您将其更改为使用i作为索引;这是否意味着存在一个外部循环?如果你在字母单词的长度上循环,你不需要我添加的长度检查。在

for i in range(len(self.letterWord)):
    if self.letterWord[i] == letter:
        self.binaryWord[i] = 1

此外,循环访问列表的索引不是最佳实践,如果需要索引,请使用enumerate。在

for i, l in enumerate(self.letterWord):
    if l == letter:
        self.binaryWord[i] = 1

如果您现在正在创建binaryWord(您没有展示它是如何创建的),您可以将其创建为一个列表理解:

self.binaryWord = [int(l == letter) for l in self.letterWord]
# int(True) is 1, int(False) is 0

问题在于

for i in self.letterWord[i:i+1]:
    if i == letter:
        self.binaryWord[i]=1

是在使用i作为列表迭代器之前,i需要查找{},因此这是错误的来源。在

试试这样的方法:

^{pr2}$

或者更好(如果可能,在一行代码中创建self.binaryWord

self.binaryWord = [ 1 if ltr == letter else 0 for ltr in self.letterWord ]

使用现有的设置,纯粹是为了压缩代码,您可以:

for idx, val in enumerate(self.letterWord[:3]):
    if val == letter:
        self.binaryWord[idx] = 1

虽然您可以使用其他方法来构建这些对象,比如列表组件/将它们压缩在一起等等。。。在

相关问题 更多 >