リスト A に 200 個の数値のリストがあるとします。リスト A を 4 つのクラスターに分割するリスト B を作成したいので、50 個のクラスターが得られます。リスト BI では、4 つの値のクラスターごとにリストを作成するため、リスト B には 50 個のリストが含まれます。
ソースを使用して問題を説明します。
from pprint import pprint
FileValuelist = []
def DetermineClusterNumber(File): #determine digits in a cluster
Lines = open(File, "r")
i = 0 # used for iterating through the lines
FirstLine = Lines.readline()
for char in FirstLine: # read through first line, till hyphen.
if char != "-":
i += 1
elif char == "-":
return i # Return number of digits in the cluster
def ReadLines(File, Cluster_Number):
Lines = open( File, "r" )
for Line in Lines:
for char in Line:
if char != "-":
FileValuelist.append(char)
def RemoveNewlines(Rawlist):
for x in range(len(FileValuelist)-9):
if FileValuelist[x] == "\n":
FileValuelist.remove(FileValuelist[x])
if FileValuelist[x] == "\r":
FileValuelist.remove(FileValuelist[x])
Cluster_Number = DetermineClusterNumber("Serials.txt") # Amount of chars in a cluster. Example: 1234-2344-2345. clusternumber = 4
ReadLines ("Serials.txt", Cluster_Number)
RemoveNewlines(FileValuelist)
list_iterater = 0
FinishedList = ([[None]*(Cluster_Number)])*((len(FileValuelist)))
amount_of_clusters = len(FileValuelist)/Cluster_Number
for x in range(0, amount_of_clusters):
for y in range(0, Cluster_Number):
FinishedList[x][y] = FileValuelist[list_iterater]
list_iterater += 1
pprint(FinishedList)
serials.txt には以下が含まれます。
4758-8345-1970-4486-2348
2346-1233-3463-7856-4572
6546-6874-1389-9842-4185
9896-4688-4689-6455-4712
9541-5621-8414-7465-5741
4545-9959-5632-6845-1351
5643-2435-5854-6754-8749
7892-3457-8923-4572-5397
5623-5698-5468-5476-9874
8762-3487-6123-7861-2679
これを実行すると、50 に分割された 50 のリストを含むリストに serials.txt が出力されることが期待されます。ただし、実行すると [2,6,7,8] が 50 回出力されます。それが最後のクラスターです。したがって、問題は39行目のどこかにあると思います.41行目でFinishedListに割り当てられた値を調べようとしましたが、それは毎回正しい値でした(リストが印刷した)。私はすでに x と y のイテレータを再チェックしました (はい、それがイテレータのスペルであることは知っています)、それらも正しいです。
では、最後のクラスターを 50 回出力するコードのどこが間違っているのでしょうか? ちなみに、私は Python 2.7 を使用しています。
前もって感謝します!