def line2link(line):
return [ll.split(':')[0] for ll in line.split(';;')[1].split()]
这表达式够复杂的
首先使用了列表解析式,然后又对split分割的结果再次进行分割
那么我们先来拆解一下列表解析式:
[ll.split(':')[0] for ll in line.split(';;')[1].split()]
等价于
a=[]
for ll in line.split(';;')[1].split():
a.append(ll.split(':')[0])
先把line按照两个分号拆开,取第1项,再按空格拆分,然后遍历结果集,将结果中的每一项按冒号拆分,取第0项,形成一个新的列表
把 line 按分隔符 ;; 分解 , 取第2个元素 (下标为1 就是第二个)
把获取的元素, 继续分解, 这个时候应该就是按回车\n或者空格分解了
然后遍历分解后的元素
取元素第一冒号前的字符 , 组成一个列表
[ll.split(':')[0] for ll in line.split(';;')[1].split()]
就等于
lst = line.split(';;')[1].split()
[ll.split(':')[0] for ll in lst ]
等价于
lst1 = line.split(';;')
lst = lst1[1].split()
[ll.split(':')[0] for ll in lst ]
这个时候清楚了吧
以 ;; 为界限分开 line ,取中分开后的第二块
以 : 为界限分割第二块,返回 第一块