J'ai appris C l'été dernier, en utilisant K&R 2e éd. livre sur C de 1989. J'ai alors décidé de prendre CS50, et j'apprends maintenant python3 pour la première fois.

J'ai également décidé de suivre un tutoriel sur python3, en ligne sur http: //www.python-course. eu / python3_sequential_data_types.php,. J'ai du mal à comprendre l'indexation des pythons pour les listes profondément imbriquées.

J'ai passé un certain temps à chercher avant de publier, mais je n'ai pas vu la réponse. Les exemples que j'ai trouvés en ligne sont de ce type:

>>> t = [[100, 'str_1'], [200, 'str_2'], [300, 'str_3']]

Ce que je comprends. L'indexation est la même que celle du tableau de caractères C 2d.

Ce qui me trouble, c'est ceci:

place= ["High up", ["further down", ["and down", ["deep down", "the answer", 42]]]]

>>> place[0]
'High up'
>>> place[1]
['further down', ['and down', ['deep down', 'the answer', 42]]]
>>> place[1][1]
['and down', ['deep down', 'the answer', 42]]
>>> place[1][1][1]
['deep down', 'the answer', 42]
>>> place[1][1][1][0]
'deep down'
>>> place[1][1][1][0][3]
'p'

Je pensais l'avoir, continuez simplement à en passer une, pour passer à la liste suivante, mais ensuite j'ai trouvé ceci.

>>> complex_list = [["a",["b",["c","x"]]],42]
complex_list[0]   #note: index 0 is the entire left, while above it's not.*
['a', ['b', ['c', 'x']]]
>>> complex_list[0][1]
['b', ['c', 'x']]
>>> complex_list[0][1][1][0]
'c'

Les deux listes me semblent presque identiques, sauf que complex_list a deux accolades sur la gauche. Quelqu'un peut-il m'expliquer la règle, je ne vois pas pourquoi place [0] n'est que le premier élément de la liste, alors que complex_list [0] est la liste entière à l'exception du numéro 42? Comment cette accolade supplémentaire change-t-elle l'indexation?

0
Manny_Mar 19 avril 2017 à 23:23

3 réponses

Meilleure réponse

Vous pouvez y penser comme chaque liste dans une liste étant un élément distinct. Tout ce qui est dans la liste n'est pas pertinent tant que vous n'y accédez pas.

Pour votre exemple:

place = ["high up", [...]]

place[0] est "high up" car le premier élément de place est cette chaîne.

complex_list = [[...], 42]

complex_list[0] est la liste entière sauf 42 car la liste est le premier élément.

1
Hayley Guillou 19 avril 2017 à 21:13

J'espère que ceci vous aide. Les deux accolades au début de complex_list impliquent que quelle que soit la longueur de complex_list c'est le premier élément complex_list [0] est une autre liste, où comme en place votre premier élément place [0] est juste une chaîne 'High up'.

Maintenant, vous devez savoir qu'une chaîne est un ensemble de caractères qui peuvent également être accédés à l'aide de l'indexation, de sorte que vous pouvez également accéder à différents éléments à l'emplacement de l'élément [0] comme suit:

print(place[0][0]) # first element in string of characters 'High up'
# H 
print(place[0][1]) # second element in string of characters 'High up'
# i
print(place[0][5]) # sixth element in string of characters 'High up'
# u

Tous les éléments imprimés ici sont des caractères dans la chaîne trouvée dans l'élément un de la liste.

Dans le cas de complex_list, le premier élément complex_list [0] est une liste et est donc accessible par indexation tandis que le deuxième élément complex_list [1] est un entier qui ne peut pas être indexé davantage

0
Pozeidon 19 avril 2017 à 23:26

J'espère que cela vous aidera à mieux comprendre l'imbrication:

a = ['this element is in outer list', #index No. [0]
     ['this is inner list', #index No. [1] to get whole list and index No. [1][0] to get 1st element
          ['this is inner list within inner list', #index No. [1][1] will get you list and No. [1][1][0] will get 1st element
               ['this is inner list within inner list that is within inner list']]], #index No. [1][1][1]
     'this element is in outer list', #index No. [2]
     ['this is inner list'], #index No. [3] if you want that list and index No. [3][0] to get string
     'this element is in outer list'] #index No. [4]

print a[0] #this element is in outer list
print a[1] #['this is inner list', ['this is inner list within inner list', ['this is inner list within inner list that is within inner list']]]
print a[1][0] #this is inner list
print a[1][1] #['this is inner list within inner list', ['this is inner list within inner list that is within inner list']]
print a[1][1][0] #this is inner list within inner list
print a[1][1][1] #['this is inner list within inner list that is within inner list']
print a[2] #this element is in outer list
print a[3] #['this is inner list']
print a[3][0] #this is inner list
print a[4] #this element is in outer list

De plus, vous pouvez accéder aux string comme s'ils étaient des list donc si vous avez:

b = 'Example'
print b[0] #this will print E
print b[1] #this will print x
0
zipa 19 avril 2017 à 22:03