创建一个类似于 "zip" 的函数
Creating a function that works like "zip"
我正在尝试制作一个类似于“zip”的功能。我的问题是那部分
a = L4[l:len(L4):len(L)]
不起作用。在下面的例子中,它应该从 L4 中取出每三个元素,并将其附加到一个新列表中,所以我以 [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
结束,但这并不是真正发生的事情。另外,如果我能制作元组就更好了,所以它看起来像 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
,但我不知道该怎么做...
L = [[1,2,3], [4,5,6], [7,8,9]]
L4 = []
def my_zip(L):
l = 0
for i in L:
if isinstance(i, list):
my_zip(i)
else:
L4.append(i)
while l < len(L):
a = L4[l:len(L4):len(L)]
l += 1
L5.append(a)
return L5
print(my_zip(L))
试试这个。
def zip_copy(*args):
lst = []
i = 0
t = tuple()
for a in range(len(min(args,key=len))):
for a in args:
t+=(a[i],)
i+=1
lst +=(t,)
t = tuple()
return lst
print(zip_copy([1,2],[3,4],[3,5])) # [(1, 3, 3), (2, 4, 5)]
print(list(zip([1,2],[3,4],[3,5]))) # [(1, 3, 3), (2, 4, 5)]
# ------------------------------------#
print(zip_copy([1,2])) # [(1,), (2,)]
print(list(zip([1,2]))) # [(1,), (2,)]
# ------------------------------------ #
print(zip_copy("Hello","Hii")) # [('H', 'H'), ('e', 'i'), ('l', 'i')]
print(list(zip("Hello","Hii"))) # [('H', 'H'), ('e', 'i'), ('l', 'i')]
对于类似 list
的对象。如果子列表中的术语具有异类长度,则 Zip 通过采用最短的子列表来“转置”列表。
def my_zip(l: list) -> list:
# size of new list
n_rows_new, n_cols_new = min(map(len, l)), len(l)
# pairing
return list(tuple(l[i][j] for i in range(n_rows_new)) for j in range(n_cols_new))
L = [[1,2,3], [4,5,6], [7,8,9, 9]]
my_zipped_L = my_zip(L)
print(list(zip(*L) == my_zipped_L)
# True
我正在尝试制作一个类似于“zip”的功能。我的问题是那部分
a = L4[l:len(L4):len(L)]
不起作用。在下面的例子中,它应该从 L4 中取出每三个元素,并将其附加到一个新列表中,所以我以 [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
结束,但这并不是真正发生的事情。另外,如果我能制作元组就更好了,所以它看起来像 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
,但我不知道该怎么做...
L = [[1,2,3], [4,5,6], [7,8,9]]
L4 = []
def my_zip(L):
l = 0
for i in L:
if isinstance(i, list):
my_zip(i)
else:
L4.append(i)
while l < len(L):
a = L4[l:len(L4):len(L)]
l += 1
L5.append(a)
return L5
print(my_zip(L))
试试这个。
def zip_copy(*args):
lst = []
i = 0
t = tuple()
for a in range(len(min(args,key=len))):
for a in args:
t+=(a[i],)
i+=1
lst +=(t,)
t = tuple()
return lst
print(zip_copy([1,2],[3,4],[3,5])) # [(1, 3, 3), (2, 4, 5)]
print(list(zip([1,2],[3,4],[3,5]))) # [(1, 3, 3), (2, 4, 5)]
# ------------------------------------#
print(zip_copy([1,2])) # [(1,), (2,)]
print(list(zip([1,2]))) # [(1,), (2,)]
# ------------------------------------ #
print(zip_copy("Hello","Hii")) # [('H', 'H'), ('e', 'i'), ('l', 'i')]
print(list(zip("Hello","Hii"))) # [('H', 'H'), ('e', 'i'), ('l', 'i')]
对于类似 list
的对象。如果子列表中的术语具有异类长度,则 Zip 通过采用最短的子列表来“转置”列表。
def my_zip(l: list) -> list:
# size of new list
n_rows_new, n_cols_new = min(map(len, l)), len(l)
# pairing
return list(tuple(l[i][j] for i in range(n_rows_new)) for j in range(n_cols_new))
L = [[1,2,3], [4,5,6], [7,8,9, 9]]
my_zipped_L = my_zip(L)
print(list(zip(*L) == my_zipped_L)
# True