-
Theo
-
-
Αποσυνδεμένος
-
pytho_
-
- Δημοσιεύσεις: 249
- Ληφθείσες Ευχαριστίες 70
-
-
|
Έχω τελειώσει με την ουσιαστική δουλεία και εάν κάποιος θέλει μπορεί να χρησιμοποιήσει τις μεθόδους και αν θέλει να μου πει αν έχουν bugs (σίγουρα έχουν ) και προτάσεις για βελτίωση
from copy import deepcopy
class ML(list):
def reshape(self,*dimesions):
self=self.flatten()
return self._reshape(*dimesions)
def _reshape(self,*dimesions):
dimesions=list(dimesions)
mul=1
for i in dimesions:
mul*=i
if mul!=len(self):
raise (ValueError)("The product of dimensions should me equal to {}".format(len(self)))
if len(dimesions)>1:
current = dimesions.pop()
else: # finished!
return type(self)(self)
result=[]
index=0
while index<len(self) :
result.append(list(self[index:index+current]))
index+=current
return type(self)._reshape(result,*dimesions)
@property
def shape(self):
bathos=0
for i in str(self):
if i!='[':
break
bathos+=1
_shape=[]
while bathos>0:
_shape.append(len(self))
self=self[0]
bathos-=1
return _shape
def flatten(self):
c=''.join([i for i in str(self)if i not in'[] ']).strip(',')
return type(self)(list(map(int,c.split(','))))
def rows_to_columns(self):
b=list(zip(*self))
return type(self)([list(i) for i in b])
@property
def items(self):
self=self.flatten()
return len(self)
@classmethod
def create_list(cls, val, *dimensions):
dimensions = list(dimensions)
if len(dimensions):
current = dimensions.pop()
else: # finished!
return cls(val)
next_list = []
for i in range(current):
next_list.append(deepcopy(val))
return cls.create_list(next_list, *dimensions)
Πως δουλεύει:
το σώζουμε σε ένα αρχείο .py στο python path και μετά >>> from ml import ML
>>> a=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
>>> b=ML(a)
>>> b
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> b.items
12
>>> b.shape
[3, 4]
>>> c=b.flatten()
>>> c
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> d=b.reshape(2,3,2)
>>> from pprint import pprint as pp
>>> pp(d)
[[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]]
>>> e=e.reshape(2,6)
>>> e
[[1, 2, 7, 8, 3, 4], [9, 10, 5, 6, 11, 12]]
>>> f=e.rows_to_columns()
>>> f
[[1, 9], [2, 10], [7, 5], [8, 6], [3, 11], [4, 12]]
>>> g=f.rows_to_columns()
>>> g
[[1, 2, 7, 8, 3, 4], [9, 10, 5, 6, 11, 12]]
>>> g==e
True
>>> h=ML.create_list('X',15,15)
>>> pp(h)
[['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X']]
Θα ετοιμάσω και το documentation και θα τα έχω github.com/k33theod/python-list-function...master/class_list.py
|