0

我有一个像

myarray = 'ABCDE'

我想输出为

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

我使用了以下代码

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

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

    print myarray[a : b]

结果我得到

AB , BC, CD, DE, E , AB

我缺少什么逻辑导致'e'出现而不是'ea'并且'ab'不应该出现???

我发现的另一种方法是使用这样的循环

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

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

输出为

'EA','AB','BC','CD','DE'  ## where the last element 'EA' comes in the begining
4

5 回答 5

2

你可以zip在这里使用:

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']

使用索引,类似于您的方法:

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'))

输出:

['AB', 'BC', 'CD', 'DE', 'EA']
['AB', 'BC', 'CD', 'DA']
于 2013-11-22T11:49:41.193 回答
0

也许它可以帮助你:

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')]
于 2013-11-22T11:53:39.037 回答
0

不难看出哪里出了问题

>>> 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

如果不做一些英勇的事情,你就不可能获得像“EA”这样的切片

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

+ 1显然会比 myarray 中的项目数多一个输出

容易修复是这样的

>>> for i in range(len(myarray)):
...     print (myarray*2)[i:i+2]
... 
AB
BC
CD
DE
EA
于 2013-11-22T12:04:54.953 回答
0
[''.join(a) for a in zip(myarray,myarray[1:]+myarray[0])]

输出:

['AB', 'BC', 'CD', 'DE', 'EA']
于 2013-11-22T11:51:00.077 回答
0

为什么不只是

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

输出

['AB', 'BC', 'CD', 'DE', 'EA']
于 2013-11-22T11:49:21.573 回答