列表推导应用实战


想象一下,经常会遇到这样一种情况。你得到了一个这样的列表:['cn', 1, 'ga', 2, 'us', 3]。本应步进2为一组的数据现在是没有意义的一维数组。 为了将数据表示得更有意义,你想得到这样一个二位数组[['cn', 1], ['ga', 2], ['us', 3]]。 首先想到的是利用range步进(step)参数, 对原列表做loop:

top = ["a", 1, "b", 2, "c", 3]
top_reset = []
for x in range(0,len(top),2):
    top_reset.append([top[x], top[x + 1]])

若已想到上面的实现方法, 那么很容易用更跳跃的思维使用更简洁的列表推导(list comprehension)实现: [top[x:x + step] for x in range(0, len(top), step)] 结合步进(step)和列表分片(slice)技术非常方便得到想要的结果。若想每三个为一组, 只需将step置为3即可。


对得到的结果逆操作的原理也一样, 使用两层for循环对其二维数组顺序遍历, 分别将其子元素append到top。

top_reset = [['cn', 1], ['ga', 2], ['us', 3]]
top = []
for member in top_reset:
    for sub_m in member:
        top.append(sub_m)

列表推导实现: [sub_m for member in top_reset for sub_m in member]


发布时间:
2018-07-11 23:00
分类:
标签: