1

シャッフルされたリストがあり、それをそれぞれ 6 つの要素を持つ 6 つのサブリストに分割したいと考えています (元のリストには 26 の要素があります)。範囲 (例: 0-5,6-11 など) を使用してサブリストを作成する必要があることはわかっていますが、方法がわかりません。それは非常に簡単なはずです!これまでの私のコードは次のとおりです。

import random

characters = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];

random.shuffle(characters)
4

3 に答える 3

1

次のようなものを使用できます。

>>> import string
>>> import random
>>>
>>> chars = list(string.uppercase + string.digits)
>>> random.shuffle(chars)
>>>
>>> [chars[i:i + 6] for i in range(0, len(chars), 6)]
[['U', 'I', 'X', '6', 'Q', 'L'],
 ['Y', 'J', 'C', 'S', '8', '0'],
 ['A', 'R', '5', 'F', 'T', 'W'],
 ['N', 'B', 'E', '2', '1', 'V'],
 ['9', 'K', 'O', 'P', '7', '4'],
 ['G', 'M', 'Z', '3', 'D', 'H']]
  • chars[i:i + 6]6position から始まる長さのサブリストを作成しiます。
  • range(0, len(chars), 6)0からまでの範囲をlen(chars)の増分でループします6:

    >>> range(0, len(chars), 6)
    [0, 6, 12, 18, 24, 30]
    
于 2013-01-11T17:23:27.817 に答える
1

使用itertools.islice():

In [246]: characters = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];

In [247]: it=iter(characters)

In [248]: [list(islice(it,6)) for _ in range(6)]
Out[248]: 
[[0, 1, 2, 3, 4, 5],
 [6, 7, 8, 9, 'A', 'B'],
 ['C', 'D', 'E', 'F', 'G', 'H'],
 ['I', 'J', 'K', 'L', 'M', 'N'],
 ['O', 'P', 'Q', 'R', 'S', 'T'],
 ['U', 'V', 'W', 'X', 'Y', 'Z']]

iter(characters): リストの反復子を作成しますcharacters

islice(iterator,len): の反復子のスライスを返しますlen=6。Islice オブジェクトはそれ自体がイテレータであるため、そのコンテンツを取得するには、isliceオブジェクトをに渡す必要があります。list()

6渡されたものは、次のrange方法で取得できます。

In [2]: int(len(characters)/6)
Out[2]: 6
于 2013-01-11T17:23:29.493 に答える
1

itertools grouper レシピに基づく

itertools.izip_longestおよび自己インクリメンタルまたはイテレータに依存

>>> list(izip_longest(*[iter(characters)] * 6))
[(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 'A', 'B'), ('C', 'D', 'E', 'F', 'G', 'H'), ('I', 'J', 'K', 'L', 'M', 'N'), ('O', 'P', 'Q', 'R', 'S', 'T'), ('U', 'V', 'W', 'X', 'Y', 'Z')]
于 2013-01-11T17:25:16.710 に答える