Ce n'points de suspension [...] dire dans une liste?
Je jouais autour de python. J'ai utilisé le code suivant dans le vide:
p = [1, 2]
p[1:1] = [p]
print p
La sortie a été:
[1, [...], 2]
Qu'est-ce que ce […]
? Il est intéressant de noter que je pouvais maintenant l'utiliser comme une liste de liste de liste jusqu'à l'infini, c'est à dire
p[1][1][1]....
Je pourrais écrire ci-dessus aussi longtemps que je le voulais et il fonctionne encore.
EDIT:
- Comment est-il représenté dans la mémoire?
- Ce qui est de son utilisation? Quelques exemples de cas où il est utile serait utile.
- Un lien vers la documentation officielle qui serait vraiment utile.
- Toujours à la recherche de réponses à ÉDITER le 1er et le 3ème élément de la liste.
- Un exemple simple serait
p = [1]; p[0] = p
. - Je pense que c'est un doublon de la Qu'est-ce que [...] (points de suspension) dans une liste de moyenne en Python?, bien que la question (et les réponses) sont mieux à cette question.
- Dreampie est intelligent " >>> p[1:1] = [p] >>> p 3: [1, <la Récursivité sur la liste avec l'id=3074777548>, 2] >>> ` fournir sur les détails
- Ne pas obtenir ce
p 3: [1, <Recursion on list with id=3074777548>, 2]
. Qu'avez-vous exécuter? id=3074777548
est l'id dep
donc facile à comprendre que sa se référant à lui-même. De toute façon, très belle question @Zel- Je n'ai pas ce que vous commande exécutée pour obtenir cette sortie.
- J'utilise dreampie.org
- Est-il une IDE pour Python ou quoi?
- son interface python comme INACTIF ou simple python >>>. suivez le lien
- J'y suis allé. Essayé de télécharger mais le lien ne fonctionne pas. Essayez à nouveau demain. Plus d'avantages que d'INACTIVITÉ?
- Le lien a bien fonctionné pour moi et à l'aide de Dreampie j'ai obtenu le même résultat que Rahul Gautam.
InformationsquelleAutor Aseem Bansal | 2013-06-18
Vous devez vous connecter pour publier un commentaire.
Cela signifie que vous avez créé une liste infinie imbriquée à l'intérieur d'elle-même, qui ne peut pas être imprimée.
p
contientp
qui contientp
... et ainsi de suite. Le[...]
notation est une façon de vous dire cela, et pour l'informer qu'il ne peut pas être représentée! Jetez un oeil à @6502 la réponse de voir une belle photo illustrant ce qui se passe.Maintenant, concernant les trois nouveaux éléments après votre edit:
C'est ce que votre code créé
C'est une liste où les premier et dernier éléments pointent à deux chiffres (1 et 2) et où le moyen de l'élément de pointe de la liste elle-même.
En Common Lisp lors de l'impression de structures circulaires est permis à un tel objet serait imprimé en tant que
ce qui signifie qu'il est un objet (étiqueté 1 avec
#1=
) qui est un vecteur à trois éléments, la seconde étant l'objet lui-même (à l'arrière-référencées avec#1#
).En Python au lieu de cela, vous obtenez juste l'information que la structure est circulaire avec
[...]
.Dans ce cas précis, la description n'est pas ambigu (c'est en arrière pointant vers une liste, mais il y a une seule liste donc ça doit être ça). Dans d'autres cas peut être toutefois ambiguë... par exemple dans
la référence arrière pourrait soit point à l'extérieur ou à l'intérieur de la liste.
Ces deux structures différentes imprimé de la même façon peut être créé avec
et ils seraient dans la mémoire comme
[1, [2, [...], 3]]
comme ceci:x[1] = [2, [...], 3]
ety[1] = [2, 1, [...]], 3]
. Cela signifie que x se compose d'un 1, puis en répétant 2s, tandis que y est constitué d'une alternance de 1s et 2s.#(1 #1=#(2 #1# 3))
pourx
et#1=#(1 #(2 #1# 3))
poury
.#1=(1 . #1#)
.À la question "Quelle est son utilisation", voici un exemple concret.
Graphique de réduction est une stratégie d'évaluation parfois utilisés afin d'interpréter un langage informatique. C'est une stratégie commune pour les paresseux de l'évaluation, notamment des langages fonctionnels.
Le point de départ est de construire un graphe représentant la séquence des "étapes", le programme va prendre. Selon le contrôle des structures utilisées dans le programme, cela pourrait conduire à un cyclique graphique (parce que le programme contient une sorte de "pour toujours" de la boucle -- ou utiliser la récursivité dont la "profondeur" seront connus à évaluation temps, mais pas au graphique-création temps)...
Afin de représenter ce graphe, vous avez besoin infini "structures de données" (parfois appelé récursive structures de données), comme celle que vous avez remarqué. Habituellement, un peu plus complexe cependant.
Si vous êtes intéressé par ce sujet, ici, c'est (entre autres) une conférence sur le sujet:
http://undergraduate.csse.uwa.edu.au/units/CITS3211/lectureNotes/14.pdf
Nous le faisons tout le temps dans la programmation orientée objet. Si les deux objets font référence les uns aux autres, directement ou indirectement, ils sont à la fois infiniment structures récursives (ou les deux de la même infiniment structure récursive, selon la façon dont vous le regardez). C'est pourquoi vous ne voyez pas beaucoup en quelque chose d'aussi primitif qu'une liste, parce que nous sommes généralement mieux décrire le concept comme interconnectés "objets" qu'une "liste infinie".
Vous pouvez également obtenir
...
avec une infinie récursive dictionnaire. Disons que vous voulez un dictionnaire des angles d'un triangle, où chaque valeur est un dictionnaire de l'autre coins reliés à ce coin. Vous pouvez l'installer comme ceci:Maintenant, si vous imprimez
triangle
(oua
oub
ouc
d'ailleurs), vous verrez qu'il est plein de{...}
parce que tout les deux angles sont se référant à dos les uns aux autres.a = {}; a['a'] = a; print a['a']['a']['a']
%pprint
pour basculer d'impression off, il va montrer...
.Que j'ai compris, c'est un exemple de point fixe
p = [1]; p[0] = p
exemple qui doitf = lambda x:x[0]
de travail. C'est un exemple d'un point fixe, mais je n'ai pas encore été en mesure de voir comment en sachant que cela est utile. La valeur réelle du point fixe est d'arriver, à partir d'un autre point de récursive ou itérative manière. Un exemple qui montre comment utiliser la structure de la liste de la question d'origine pour créer le Y combinator serait utile si elle est possible.q = lambda: q
rend infiniment appelable lambdaLe nom de l'objet spécial est les points de suspension. Je suppose qu'il est mis en œuvre comme un objet singleton dans le Python intepreter/VM -- quelque chose comme Aucun --- une sentinelle de toutes sortes. Comme vous l'avez vu c'est une façon pour Python pour représenter la référence d'une liste à l'intérieur de lui-même.