冬雪雪冬 发表于 2018-8-15 14:27:43

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 14:37:44

本帖最后由 凌九霄 于 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)

a641743376 发表于 2018-8-15 15:30:49

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

小Q学Python 发表于 2018-8-15 15:36:16

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)

JessiFly 发表于 2018-8-15 16:27:58

# 返回方阵元素从小到大排列的一个列表
#[-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))

晓屁屁 发表于 2018-8-15 16:41:54

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))

graceasyi 发表于 2018-8-15 16:59:54

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 17:01:27

本帖最后由 塔利班 于 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-15 17:35:35

本帖最后由 天圆突破 于 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))

拉了盏灯 发表于 2018-8-15 18:22:22

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], ])

787330410 发表于 2018-8-15 18:59:17

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 19:12:35

拉了盏灯 发表于 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], ])

祥哥威武 发表于 2018-8-15 19:29:56

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))

Henriz 发表于 2018-8-16 08:58:07

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

"""

mongoole 发表于 2018-8-16 09:41:48

#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:44:58

本帖最后由 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)

喂猪专业户 发表于 2018-8-16 10:35:06

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')

grf1973 发表于 2018-8-16 11:15:02

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)

776667 发表于 2018-8-16 11:53:17

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]]

chongchuigu 发表于 2018-8-16 13:12:01

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
查看完整版本: Python:每日一题 199