我有一个类似
的数组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
答案 0 :(得分: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']
答案 1 :(得分:0)
为什么不
print [data[i: (i + 2)] for i in range(len(data) - 1)] + [data[-1] + data[0]]
<强>输出强>
['AB', 'BC', 'CD', 'DE', 'EA']
答案 2 :(得分:0)
[''.join(a) for a in zip(myarray,myarray[1:]+myarray[0])]
输出:
['AB', 'BC', 'CD', 'DE', 'EA']
答案 3 :(得分: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')]
答案 4 :(得分: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