如何切换for循环中的一系列数字

时间:2018-01-03 00:14:42

标签: python for-loop slice

我有一个N长度的数字字符串或数字。然后我把它变成一个列表来迭代数字。我想将列表切成5个数字块,看起来像这样:

N = '1234567890'

slice1 = '12345'
slice2 = '23456'
slice3 = '34567'

依旧......

我无法找到python的代码示例,特别是切片和for循环。任何帮助将不胜感激,谢谢。

6 个答案:

答案 0 :(得分:1)

您可以创建使用列表理解的列表。

docker-compose

答案 1 :(得分:0)

就这样做

n = '1234567890'
for i in range(len(n)):
   print(n[i:i+5])

这应该可以解决问题。但我需要说的是,很难相信你实际上是在搜索互联网,因为这是一个经常被问到的问题......

<强>更新

如果您想使用不同的切片,可以试试这个:

n = '1234567890'

ar= [None]*len(n)

for i in range(len(n)):
   if len(n[i:i+5]) == 5:
      ar[i] = n[i:i+5]
   else:
      del ar[i:-1]
      del ar[-1]
      break

for i in ar:
   print(i)

所以这里发生的是:

  • 您创建一个具有字符串大小的数组,并用无值填充它们
  • 检查字符串的剩余大小是否为5个长
    • 如果是这样的话,你用[i:i + 5]将字符串切成5个片段并再次检查下一个片段
    • 如果不是,则删除剩余的None值并中断循环

答案 2 :(得分:0)

首先,您需要了解N =&#39; 1234567890&#39;中的每个元素。被编入索引。如果您想访问"1",可以使用N[0]"2" N[1] N[9]。依此类推"0",等于slice1 = '12345' slice2 = '23456' slice3 = '34567'

你的目标是创造像

这样的东西
slice1

让我们看一下N这两个值,以及如何通过'1' '2' '3' '4' '5' N[0] N[1] N[2] N[3] N[4]

访问
l

现在我们转向列表切片。给出一个列表start。可以通过指定endl[start:end]来选择其中的一部分,其中包括l[start:end]这两个版本。

请注意,l[start], l[start+1], ..., l[end-1] 会选择元素

l[end]

是。未选中slice1。选择将包括起始索引但排除结束索引。

返回'12345'示例,您如何选择N[0:5]?从上面的讨论中,我们知道我们需要从0到4的indeces。因此,我们需要放置N[5]因为如上所述,slice1不会以这种方式包含。

根据这种做法,您现在可以编写for循环以连续产生slice2slice3gap = 5 slices = [] for i in range(3): slices[i] = N[i:i+gap] # slices will be ["12345", "23456", "34567"] # or slice1 = N[0:5] slice2 = N[1:6] slice3 = N[2:7]

我们可以像

那样做
gap

我们通过定义变量i来做到这一点。起始索引和结束索引之间始终存在5的差距,因为我们想要的切片长度为5.还有一些观察:如果起始索引是i + gap,那么结束索引应该是{{1 }}。我们一次增加一个以获得新的切片。

请注意,我只介绍了一种方法来执行列表切片,以满足您在此示例中的特定需求。您可以在此问题Understanding Python's slice notation

中找到更多用法

答案 3 :(得分:0)

您也可以尝试事先将N转换为列表,并在每次迭代时弹出第一个字符,直到列表长度小于5。然后你可以在每次迭代时取前五个字符。

以下是使用collections.deque的示例:

from collections import deque
from itertools import islice

N = '1234567890'
items = deque(N)
size = 5

result = []
while len(items) >= size:
    result.append("".join(islice(items, 0, size)))
    items.popleft()

print(result)

哪个输出:

['12345', '23456', '34567', '45678', '56789', '67890']

注意: itertools.islice用于切片deque对象。您也可以使用list(items)[:5],但每次都会创建一个额外的列表副本。

答案 4 :(得分:0)

使用dict comprehension

N = '1234567890'
slices = {'slice'+str(i+1): N[i:i+5] for i in range(len(N)-4)}

用法:

slice1 = slices['slice1']
slice2 = slices['slice2']
slice3 = slices['slice3']

依旧......

答案 5 :(得分:0)

就这么简单: -

from collections import deque
N = '1234567890'
m = deque(N)
for i in range(len(m)-4):
    print N[i:i+5]
#output as you expected