Ich habe ein Array wie

myarray = 'ABCDE'

Und ich möchte Ausgabe als

required_output = [AB,BC,CD,DE,EA]  ## A cyclic form of array 'ABCDE'

Ich habe folgenden Code verwendet

for i in range(len(myarray) + 1):

    a = i % len(myarray) ; b = i % len(myarray) + 2

    print myarray[a : b]

Ergebnis bekomme ich als

AB , BC, CD, DE, E , AB

Welche Logik fehlt mir, die dazu führt, dass 'e' anstelle von 'ea' erscheint und auch 'ab' nicht erscheinen sollte ???

Eine andere Möglichkeit, die ich gefunden habe, war die Verwendung einer solchen Schleife

for i in range(1,len(myarray)):

    print myarray[i-1] + myarray[i]

Gibt Ausgabe als

'EA','AB','BC','CD','DE'  ## where the last element 'EA' comes in the begining
0
Ashutosh 22 Nov. 2013 im 15:43

5 Antworten

Beste Antwort

Es ist nicht schwer zu sehen, was falsch läuft

>>> myarray = 'ABCDE'
>>> for i in range(len(myarray) + 1):
...     a = i % len(myarray) ; b = i % len(myarray) + 2
...     print a, b, myarray[a: b]
... 
0 2 AB
1 3 BC
2 4 CD
3 5 DE
4 6 E
0 2 AB

Es gibt keine Möglichkeit, ein Stück wie "EA" zu bekommen, ohne etwas Heldenhaftes zu tun

>>> myarray[::-4]
'EA'

Das + 1 gibt Ihnen offensichtlich eine Ausgabe mehr als die Anzahl der Elemente in myarray

Einfache Lösung ist so etwas

>>> for i in range(len(myarray)):
...     print (myarray*2)[i:i+2]
... 
AB
BC
CD
DE
EA
0
John La Rooy 22 Nov. 2013 im 12:04

Sie können zip hier verwenden:

def cycle(s):
    return [ ''.join(x) for x in zip(s, s[1:]+s[:1])]

>>> cycle('ABCDE')
['AB', 'BC', 'CD', 'DE', 'EA']
>>> cycle('ABCD')
['AB', 'BC', 'CD', 'DA']

Verwenden von Indizes, ähnlich Ihrer Methode:

def cycle(s):
    for i in range(len(s)):
        yield s[i] + s[(i+1)%len(s)]

print list(cycle('ABCDE'))
print list(cycle('ABCD'))

Ausgabe:

['AB', 'BC', 'CD', 'DE', 'EA']
['AB', 'BC', 'CD', 'DA']
2
Ashwini Chaudhary 22 Nov. 2013 im 11:49

Warum nicht einfach

print [data[i: (i + 2)] for i in range(len(data) - 1)] + [data[-1] + data[0]]

Ausgabe

['AB', 'BC', 'CD', 'DE', 'EA']
0
thefourtheye 22 Nov. 2013 im 11:49

Vielleicht hilft es dir:

In [1]: m = 'ABCDE'

In [2]: ml = list(m)

In [3]: zip(ml, ml[1:] + [m[0]])
Out[3]: [('A', 'B'), ('B', 'C'), ('C', 'D'), ('D', 'E'), ('E', 'A')]
0
greg 22 Nov. 2013 im 11:53
[''.join(a) for a in zip(myarray,myarray[1:]+myarray[0])]

Ausgabe:

['AB', 'BC', 'CD', 'DE', 'EA']
0
VIKASH JAISWAL 22 Nov. 2013 im 11:51