Python:每日一题 199
本帖最后由 冬雪雪冬 于 2018-8-19 18:53 编辑发表于 昨天 12:50 | 只看该作者
我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。
题目:
一个由整数组成的二维列表,这里以4X4为例,
[[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
打印成一个二维的方阵是:
-15 -82 88 -10
-29 -88 -43 23
-2 27 26 8
64 39 65 93
现在要求一个特殊的排序方式使得列表成为这样:
[[-88, 8, 23, 93], [-82, -2, 26, 88], [-43, -10, 27, 65], [-29, -15, 39, 64]]
即数字由小到大的排列是,从方阵的第一列的由上到下,第二列的由下到上,以此类推。
本帖最后由 凌九霄 于 2018-8-15 17:39 编辑
lst = [ [ -15, -82, 88, -10 ], [ -29, -88, -43, 23 ], [ -2, 27, 26, 8 ], [ 64, 39, 65, 93 ] ]
lsta = sorted([ x for y in lst for x in y ])
lstb = [ lsta[ i * 4:i * 4 + 4 ][ ::-1 ] if i % 2 else lsta[ i * 4: i * 4 + 4 ] for i in range(4) ]
lstc = [ [ lstb[ i ][ j ] for i in range(0, 4) ] for j in range(0, 4) ]
for i in lstc:
print(*i) list1=[[-88, 8, 23, 93], [-82, -2, 26, 88], [-43, -10, 27, 65], [-29, -15, 39, 64]]
count=0
for each_list in list1:
each_list.sort()
for j in each_list:
print(j,end=' ')
count+=1
if count==4:
print('\n')
count=0 a = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
b = []
for i in a:
b += i
b.sort()
c = []
for i in range(4):
if i % 2 == 0:
c.append(b)
else:
c.append(b[::-1])
d = list(zip(*c))
print(d) # 返回方阵元素从小到大排列的一个列表
#[-88, -82, -43, -29, -15, -10, -2, 8, 23, 26, 27, 39, 64, 65, 88, 93]
def sort_matrix(matrix_list):
length = len(matrix_list)
sort_list = []
for each in matrix_list:
for each_num in each:
sort_list.append(each_num)
sort_list.sort()
return sort_list
#返回图中所示蜿蜒曲折的排列的方阵
#[[-88, -82, -43, -29], , , ]
def zigzag(sort_list):
length = int(len(sort_list)**0.5)
temp_matrix = []
for i in range(length):
temp = []
for j in range(length):
if i%2:
temp.append(sort_list[(i+1)*length-j-1])
else:
temp.append(sort_list)
temp_matrix.append(temp)
return temp_matrix
def fun199(matrix_list):
length = len(matrix_list)
zz_matrix = zigzag(sort_matrix(matrix_list))
result = []
for i in range(length):
temp = []
for j in range(length):
temp.append(zz_matrix)
result.append(temp)
return result
if __name__ == '__main__':
test_list = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
print(fun199(test_list)) import numpy
list1 = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
def sort_list(list1):
list2 = []
list3 = []
list4 = []
list5 = []
list6 = []
len_list1 = len(list1)
for x in range(len_list1):
for y in range(len_list1):
list3.append(list1)
list3 = sorted(list3)
for x in range(0,len(list3),len_list1):
list2.append(list3)
for x in range(len_list1):
if x % 2 == 0:
list4.append(list2)
else:
list4.append(sorted(list2,reverse=True))
for x in range(len_list1):
for y in range(len_list1):
list5.append(list4)
for x in range(0,len(list5),len_list1):
list6.append(list5)
return numpy.array(list6).reshape(len(list6),4)
print(sort_list(list1)) def fun199(dlist):
one_dim = sorted()
c = len(dlist)
two_dim = []
for t in range(0, len(one_dim), c):
if (t // c) % 2:
tr = one_dim
tr.reverse()
two_dim.append(tr)
else:
two_dim.append(one_dim)
return list(map(list, list(transpose(two_dim))))
def transpose(matrix):
return zip(*matrix)
dlist = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
print(fun199(dlist))
结果:
[[-88, 8, 23, 93], [-82, -2, 26, 88], [-43, -10, 27, 65], [-29, -15, 39, 64]] 本帖最后由 塔利班 于 2018-8-15 19:02 编辑
def fun199(x):
n=len(x)
m=len(x)
t=[]
for each in x:
t+=each
t.sort()
for j in range(m):
for i in range(n):
if not j%2:
x=t
else:
x=t
return x
完全不会numpy,感觉用那个会不会简单点 本帖最后由 天圆突破 于 2018-8-16 08:41 编辑
只针对这道题(4x4,不加验证参数)
from functools import reduce
list(zip(*list(map(lambda x:list(reversed(x)) if list(zip(**4)).index(x)%2 else x ,list(zip(**4))))))
扩展到任意n*n列表(加验证参数):
from functools import reduce
def func199(lst):
if not reduce(lambda x, y: x and y, map(lambda x: isinstance(x, list) and len(x) == len(lst), lst)): #查错
print("错误的格式")
return
lst = list(zip(**len(lst))) #排序并分组
lst = list(map(lambda x:list(reversed(x)) if lst.index(x)%2 else x ,lst)) #把奇数列逆排序后转置
return list(zip(*lst))
if __name__ == '__main__':
lst = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
print(func199(lst)) import numpy as np
def fun199(l):
x = np.array(l)
x = np.sort(l, axis=None)
x.shape = 4,4
x.tolist()
for i in range(4):
for each in range(4):
if i == 0 or i == 2:
l= x
else:
l= x[::-1]
return l
fun199([[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]) def fun199(list1):
list2=
list2.sort()
list3=[] for a2 in list1]
for a in :
list3.reverse()
list4=[ for b1 in range(len(list3))] for b2 in range(len(list3))]
return list4 拉了盏灯 发表于 2018-8-15 18:22
可以处理4*4,5*5正方型矩阵,
import numpy as np
def fun199(l):
w = len(l)
x = np.array(l)
x = np.sort(l, axis=None)
x.shape = w,w
x.tolist()
for i in range(w):
for each in range(w):
if i + 2 % 2 == 0:
l= x
else:
l= x[::-1]
return l
fun199([[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]) def newList(list0):
list1 = []
list2 = []
list3 = []
list4 = []
list5 = []
list6 = []
for i in list0:
for j in i:
list1.append(j)
list1.sort()
for i in range(len(list1)):
if i % 8 == 0 or i % 8 == 7:
list2.append(list1)
elif i % 8 == 1 or i % 8 == 6:
list3.append(list1)
elif i % 8 == 2 or i % 8 == 5:
list4.append(list1)
else:
list5.append(list1)
for i in range(2, 6):
list6.append(eval("list%d"%i))
return list6
list0 = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
print(newList(list0)) def Newlist(list_a):
list_long = []
for i in range(len(list_a)):
list_long = list_long + list_a
list_long.sort()
num = 0
for n in range(len(list_a)): #循环赋值
for m in range(len(list_a)):
if n%2 == 0:
list_a = list_long
num += 1
else:
list_a = list_long
num += 1
for m in range(len(list_a)): #循环打印
for n in range(len(list_a)):
print(str(list_a).ljust(7),end = '')
print('')
list_a = [[-88, 8, 23, 93,44], [-82, -2, 26, 88,45], [-43, -10, 27, 65,12], [-29, -15, 39, 64,68],]
Newlist(list_a)
"""
输出结果:
-88 3 8 64 65
-82 -2 12 45 68
-43 -10 23 44 72
-29 -15 26 43 88
-28 -22 27 39 93
"""
#coding:utf-8
def sort(a):
m = []
for i in a:
m += i
n = sorted(m)
cut(n)
def cut(n):
b = []
b.append(n)
b.append(list(reversed(n)))
b.append(n)
b.append(list(reversed(n)))
# print(b)
result(b)
def result(b):
c = [ for i in b] for j in range(len(b))]
# print(c)
for k in c:
print('')
for h in k:
print('%s \t'%h,end='')
if __name__ == '__main__':
a = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
sort(a)
本帖最后由 maogo 于 2018-8-16 09:47 编辑
A = [[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
#将A中所有元素放入一个列表中,并排序
listA = []
for col in A:
for num in col:
listA.append(num)
listA.sort()
print(listA)
#每次取出listA中最小元素依次放入B的四个列表中
B0 = []
B1 = []
B2 = []
B3 = []
i = j = 0
for num in listA:
keyi = i % 4
keyj = j % 2
if keyj == 0: #如果为j奇数,从前向后添加
if keyi == 0:
B0.append(num)
elif keyi == 1:
B1.append(num)
elif keyi == 2:
B2.append(num)
else:
B3.append(num)
j+= 1
i+= 1
else: #如果为j偶数,从后向前添加
if keyi == 0:
B3.append(num)
elif keyi == 1:
B2.append(num)
elif keyi == 2:
B1.append(num)
else:
B0.append(num)
j+= 1
i+= 1
B =
print(B) list1=[[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
count=0
list2=[]
for i in range(4):
for j in range(4):
list2.append(list1)
list3=sorted(list2)
#chongxinpaixu,anzhao shu chu yao qiu
list4=[]
for n in range(4):
list4.append([])
for m in range(16):
if m in range(4):
list4.append(list3)
elif m in range(4,8):
list4.append(list3)
elif m in range(8,12):
list4.append(list3)
elif m in range(12,16):
list4.append(list3)
#dayin
for k in range(4):
for l in range(4):
print(list4,end=' ')
count += 1
if(count%4==0):
print(end='\n') a=[[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
imax,jmax,n=len(a),len(a),0
b=sorted( for x in a for k in range(jmax)])
for j in range(jmax):
(i1,i2,step)=(0,imax,1) if j%2==0 else (imax-1,-1,-1)
for i in range(i1,i2,step):
a=b
n+=1
print(a) def fun199(x):
list_a = [[] for i in range(len(x))]
list_b = []
for i in x:
for j in i:
list_b.append(j)
list_b = sorted(list_b)
for i in range(len(x)):
if i%2 == 0:
for j in range(len(x)):
list_a.append(list_b)
list_b = list_b
else:
for j in range(len(x))[::-1]:
list_a.append(list_b)
list_b = list_b
return list_a
>>> fun199([[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ])
[[-88, 8, 23, 93], [-82, -2, 26, 88], [-43, -10, 27, 65], [-29, -15, 39, 64]] def a199():
list1=[[-15, -82, 88, -10], [-29, -88, -43, 23], [-2, 27, 26, 8], ]
list2=[]
for i in list1:
for j in i:
list2.append(j)
list2.sort()
list3=[]
n=4
list3= for i in range(0,len(list2),n)]
list3.sort(reverse=True)
list3.sort(reverse=True)
for i in range(len(list3)):
print(list3,end='\t')
print(list3,end='\t')
print(list3,end='\t')
print(list3)
a199()
页:
[1]
2