2017-08-20 18 views
-3

Pythonで再帰を使用してリストのリストを作成しようとしています。例えばTypeError: 'set'オブジェクトに属性 '__getitem__'がありません

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__' 
+2

あります。 – user2357112

+0

{1、2、3}と[1,2,3]は全く異なる2つのオブジェクトです –

+0

ええ、指摘してくれてありがとう、今はうまくいきます。 –

答えて

1

を他のユーザーが指摘したように、リストは[]括弧で作られています。

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 

({}括弧は、いくつかのCのような言語からの習慣であってもよいが、Pythonで、{}括弧内のアイテムのリストがセットされている出力を

[[1, 2, 3], [2, 3], [3]] 

を与え、正常に動作しハッシュセット)。重要な違いは、セットが順序付けされておらず、メンバーシップテストに使用されているのに対して、リストは順序付けされ、索引付けと反復をサポートすることです。 "has no attribute '__getitem__'"は、セットがインデックス作成をサポートしていないことを意味します。これは、実際にl.__getitem__(...)になるl[0]のようなものです。 、

>>> a = {1, 2, 3} 
>>> b = [1, 2, 3] 
>>> c = {1: "x", 2: "y", 3: "z"} 

aがセットさ

より例証の用語で - {}括弧もdict S(HashMapの、連想配列..)を作るために使用されるが、それはコロンでだされることに注意してください

bリストであり、

cは `{1,2,3}`リストではない辞書

関連する問題