Python:每日一题82
- 2017-11-27 14:38:00
- 六月
- 来源:
- http://bbs.fishc.com/thread-94808-1-1.html
- 转贴 582
有一个长度不一的有10个子列表的二维列表,如下面的例子(这里为了好看,没有有列表的形式显示)
- A0 A1 A2 A3 A4 A5 A6 A7 A8
- B0 B1 B2 B3 B4 B5
- C0
- D0 D1 D2 D3 D4
- E0 E1 E2 E3 E4
- F0 F1 F2 F3 F4 F5 F6 F7 F8
- G0
- H0 H1 H2 H3 H4 H5 H6 H7 H8
- I0 I1 I2 I3 I4 I5
- J0 J1
看上去有许多空位,编写一个函数,使列表的元素下落,成为下面的型式,形成新的列表。
- 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
即列表为:
- [['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)
接收一个二维列表作为参数,返回一个二维列表。
为了随机生成原始列表,可以参考下面的程序:
- import random
- list1 = [[] for i in range(10)]
- for i in range(10):
- for j in range(random.randint(1, 9)):
- list1[i].append(chr(65 + i) + str(j))
- def drop(list1):
- maxlen = max([len(i) for i in list1])
- for i in range(10):
- list1[i] += ['' for j in range(len(list1[i]), maxlen)]
- lst = [list(i) for i in zip(*list1)]
- for i in lst:
- i.sort()
- lst = [list(i) for i in zip(*lst)]
- for i in range(10):
- while '' in lst[i]:
- lst[i].remove('')
- return lst
发表评论