我正在尝试使用Python中的递归创建列表列表。
例如:
li = [1,2,3,4,5] // given list
listoflists = [[1,2,3,4,5],[2,3,4,5],[3,4,5],[4,5],[5]]//required list
def recur(li,index,perlist):
if(index==3):
return
else:
templi = li[index:len(li)]
perlist.append(templi)
recur(li,index+1,perlist)
li = {1,2,3}
perlist = []
recur(li,0,perlist)
print perlist
它抛出以下错误:
TypeError: 'set' object has no attribute '__getitem__'
答案 0 :(得分:2)
正如其他用户所指出的那样,列表是用[]括号组成的。
def recur(li,index,perlist):
if(index==3):
return
else:
templi = li[index:len(li)]
perlist.append(templi)
recur(li,index+1,perlist)
li = [1,2,3]
perlist = []
recur(li,0,perlist)
print perlist
工作正常,提供输出
[[1, 2, 3], [2, 3], [3]]
{}括号可能是某种类似C语言的习惯,但在Python中,{}括号中的项列表是一个集合(HashSet)。重要的区别在于集合是无序的,并且用于成员资格测试,而列表是有序的,并且支持索引和迭代。 “has no attribute '__getitem__'
”表示集合不支持索引。这与l[0]
实际成为l.__getitem__(...)
之类的内容有关。请注意,{}括号也用于制作dict
s(HashMap,关联数组..),但这是一个冒号 -
更具说明性的术语:
>>> a = {1, 2, 3}
>>> b = [1, 2, 3]
>>> c = {1: "x", 2: "y", 3: "z"}
a
是一个集合,
b
是一个列表,
c
是一个词典