Kurioses Verhalten von Substring

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,
    bisher habe ich gemeint, es ist einfach. Ich habe einen String

    Code
    s = "abcde"
    x = s[2:2]

    ergibt
    x = "cd"
    weil Linux üblicherweise bei 0 anfängt zu zählen.
    Lässt man den ersten Parameter weg, dann beginnt es am Anfang mit der entsprechenden Länge; lässt man den zweiten Parameter weg, bekommt man ab der angegebenen Stelle den Rest.

    Nun habe ich hier ein kurioses Verhalten.

    Code
    ...
    print vneuinp + " " + str(len(vneuinp))
    for i in range(0, 11): 
      o = vneuinp[i:1]
      print str(i) + " " + o
    ...

    ergibt die folgende Ausgabe:


    10101010101
    12
    0 1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    Warum bekomme ich da bei den Indizes 1 bis 10 nichts?

    Erstaunlicherweise funktioniert es wie folgt:

    Code
    ...
    print vneuinp + " " + str(len(vneuinp))
    for i in range(0, 11): 
      o = vneuinp[i]
      print str(i) + " " + o
    ...

    10101010101
    12
    0 1
    1 0
    2 1
    3 0
    4 1
    5 0
    6 1
    7 0
    8 1
    9 0
    10 1


    Spinne ich oder spinnt mein Raspy?

    Einmal editiert, zuletzt von doppelmeter (18. Juni 2017 um 11:30)

  • Hallo doppelmeter,


    guckst Du
    Demnach handelt es sich bei den "Indizes" um Positionsangaben - nicht um Längenangaben.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (18. Juni 2017 um 11:38)

  • Hallo linusg,


    [OT]Andreas meldet sich zu Python? Ich mach ein Kreuz im Kalender... :D[/OT]


    Bestimmt schon >> 100 Mal. Ich habe sogar schon mal ganze Funktionen in Python gepostet. Selbstverständlich ungetestet. Und hat sogar funktioniert. So äußerten sich zumindest damals die TE's.

    In diesem Fall war das nicht so schwer, denn das String-Konzept von Icon baut auf dem von Snobol auf. Python hat sich einiger Konzepte von Icon bedient - u.a. auch der String-Adressierung. Es ist - zugegebenermaßen - am Anfang gewöhnungsbedürftig. Wenn man es (z.B. dass es sich bei den Indizes weniger um das x-te Zeichen handelt sondern viel mehr um die Stelle zwischen den Zeichen, dann ergeben diese Werte auch in Verbindung mit Längenangeben so richtig Sinn) aber begriffen hat, ist das sehr intuitiv. In Icon gibt als allerdings noch weitere Adressierungsmöglichkeiten (mit + bzw. - vor/hinter dem Doppelpunkt, wodurch dann auch Längenspezifikationen erfolgen. Aber man kann ja in Python nicht immer alles haben. Vielleicht wäre das was für die Version 4?

    Beste Grüße

    Andreas
    Automatisch zusammengefügt:

    Hallo Thimm,


    Dann müsste aber das erste Beispiel mit x = "cd" falsch sein und nur "c" ergeben?

    In dem fall sogar nur eine leere Zeichenkette. Denn wenn man sich die Adressierung so denkt:
    [font="Courier New"]
    " a b c d e "
    "| | | | | |"
    "0 1 2 3 4 5" je nach Programmiersprache so
    "1 2 3 4 5 6" oder so
    -5-4-3-2-1 0" geht sogar auch

    [/font]
    Dann zeigt der Index 2 zwischen die Zeichen b und c. Die Angabe des zweiten Index zeigt auf die gleiche Stelle. Das Ergebnis muss somit eine leere Zeichenkette sein.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (18. Juni 2017 um 18:09)


  • Dann müsste aber das erste Beispiel mit x = "cd" falsch sein und nur "c" ergeben?

    Ja, das von mir Geschriebene ist tatsächlich falsch, weil ich davon ausgegangen bin, dass die beiden Parameter Ab-Stelle und Länge beinhalten, so wie ich das in Substring-Funktionen in Basic, PHP und RPG kenne. Aber eben, in Python ist doch einiges anders als in den mir bisher bekannten Programmiersprachen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!