【问题标题】:Appending a list that receives a list containing letters and returns a new list with all the positions of a given letter附加一个列表,该列表接收包含字母的列表并返回一个包含给定字母所有位置的新列表
【发布时间】:2020-03-27 20:45:08
【问题描述】:

所以我需要定义一个函数来接收包含字母的列表并返回一个包含给定字母所有位置的新列表,例如lst = ['a', 'b', 'c'] 如果letter = 'a' 然后[0]。在我的代码中,我得到了

    res=res.append(finallist)
AttributeError: 'NoneType' object has no attribute 'append'

我做错了什么?

def  searchlist(lst,letter):
   res=[]
   for i in range(len(lst)):
     finallist=lst.index(letter)
     res=res.append(finallist)
   return res

【问题讨论】:

标签: python python-3.x


【解决方案1】:

你应该把res=res.append(finallist)改成res.append(finallist)

因为res.append(finallist)不会返回一个'list'对象,而只是成功的那行代码,它是一个'NoneType'对象。 (实际上它什么都不返回。)

现在您的代码将如下所示:

def searchlist(lst, letter):
    res = []
    for i in range(len(lst)):
        finallist = lst.index(letter)
        res.append(finallist)
    return res

但是,即使您运行此代码,您的程序也不会给您想要的结果,例如lst=['a', 'b', 'c'] 如果letter='a' 然后[0, 0, 0]

你最好使用下面的代码来得到你想要的结果。

def searchlist(lst, letter):
    res = []
    for i, element in enumerate(lst):
        if element == letter:
            res.append(i)
    return res


test_result = searchlist(['a', 'b', 'c', 'a'], 'a')
print(test_result)

或者您可以通过这种方式使您的代码更简单、更酷(这是更可取的):

def searchlist(lst, letter):
    return [i for i, element in enumerate(lst) if element == letter]


test_result = searchlist(['a', 'b', 'c', 'a'], 'a')
print(test_result)

我们将这种技术称为“列表理解”

我从https://stackoverflow.com/a/16685428/8423105得到这个想法

祝你好运。

【讨论】:

    【解决方案2】:

    正如 rivamarco 在 cmets 中所说,您只需从代码中删除 res =,因为当您将元素附加到列表时,您并没有进行分配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2020-08-08
      • 2020-06-17
      相关资源
      最近更新 更多