每天开心一点

Python:每日一题82

2017-11-27 14:38:00    六月    583    来源: http://bbs.fishc.com/thread-94808-1-1.html

题目:

有一个长度不一的有10个子列表的二维列表,如下面的例子(这里为了好看,没有有列表的形式显示)
  1. A0 A1 A2 A3 A4 A5 A6 A7 A8
  2. B0 B1 B2 B3 B4 B5
  3. C0
  4. D0 D1 D2 D3 D4
  5. E0 E1 E2 E3 E4
  6. F0 F1 F2 F3 F4 F5 F6 F7 F8
  7. G0
  8. H0 H1 H2 H3 H4 H5 H6 H7 H8
  9. I0 I1 I2 I3 I4 I5
  10. J0 J1
复制代码

看上去有许多空位,编写一个函数,使列表的元素下落,成为下面的型式,形成新的列表。
  1. A0
  2. B0
  3. C0 A1
  4. D0 B1 A2 A3 A4
  5. E0 D1 B2 B3 B4
  6. F0 E1 D2 D3 D4 A5
  7. G0 F1 E2 E3 E4 B5
  8. H0 H1 F2 F3 F4 F5 A6 A7 A8
  9. I0 I1 H2 H3 H4 H5 F6 F7 F8
  10. J0 J1 I2 I3 I4 I5 H6 H7 H8
复制代码

即列表为:
  1. [['A0'], ['B0'], ['C0', 'A1'], ['D0', 'B1', 'A2', 'A3', 'A4'], ['E0', 'D1', 'B2', 'B3', 'B4'], ['F0', 'E1', 'D2', 'D3', 'D4', 'A5'], ['G0', 'F1', 'E2', 'E3', 'E4', 'B5'], ['H0', 'H1', 'F2', 'F3', 'F4', 'F5', 'A6', 'A7', 'A8'], ['I0', 'I1', 'H2', 'H3', 'H4', 'H5', 'F6', 'F7', 'F8'], ['J0', 'J1', 'I2', 'I3', 'I4', 'I5', 'H6', 'H7', 'H8']]
复制代码


写出函数:
drop(list1)
接收一个二维列表作为参数,返回一个二维列表。

为了随机生成原始列表,可以参考下面的程序:
  1. import random
  2. list1 = [[] for i in range(10)]

  3. for i in range(10):
  4.     for j in range(random.randint(1, 9)):
  5.         list1[i].append(chr(65 + i) + str(j))
复制代码


楼主的写法:
  1. def drop(list1):
  2.     maxlen = max([len(i) for i in list1])
  3.     for i in range(10):
  4.         list1[i] += ['' for j in range(len(list1[i]), maxlen)]
  5.     lst = [list(i) for i in zip(*list1)]
  6.     for i in lst:
  7.         i.sort()
  8.     lst = [list(i) for i in zip(*lst)]
  9.     for i in range(10):
  10.         while '' in lst[i]:
  11.             lst[i].remove('')
  12.     return lst
复制代码