第一时间收到 Python 技术干货!

Stackoverflow 作为全球最大的开发者问答社区,里面积累了许多优质问答内容,在这里我根据 issue 的投票排行榜单,挑选了在 Python 模块中点赞比较高的 5 个问答,并整理推送给大家,如果你能坚持把文章全部内容看完,一定会有所收获!

1,如何将含列表的列表变为 flat list(一维列表)

可能会有小伙伴看到题目比较蒙,这列先解释一下几个名词,​含列表中的列表(代称 形式一)​ 表示形式如下,此列表类型中不仅含有单个元素,还含有列表元素;

[[1, 2, 3], [4, 5, 6], [7], [8, 9]]

flat list ( ​代称形式二​ ):​flat​ 的意思表示平坦,意思就是把列表摊平即列表元素只含有单个元素,形式如下

[1, 2, 3, 4, 5, 6, 7, 8, 9]

如何将 ​形式一​ 变为 ​形式二​,这里给出了几种方法:

1,一行代码实现

**(1)**借助列表推导(list comprehension)

list2d = [[1,2,3],[4,5,6],[7],[8,9]]
flat_list = [item for sublist in list2d for item in sublist]

(2)​ 借助 lambda 函数

faltten = lambda l:[item for sublist in l for item in sublist]
faltten(list2d)

2,借助  itertools 模块

(1)​  借助  itertools.chain() 方法

import itertools
list2d = [[1,2,3], [4,5,6], [7], [8,9]]
merged = list(itertools.chain(*list2d))

(2)​ 借助 itertools.chain.from_iterable() 方法 ,不需要在列表前缀 ***** 操作符

import itertools
list2d = [[1,2,3], [4,5,6], [7], [8,9]]
merged = list(itertools.chain.from_iterable(list2d))

2, Python 中是否含有字符串 contains 方法

Java 中 提供了 string.contains( substring) 和 string.indexof( substring ) 方法,用于判断 substring 是否包含在 String 中,那么 Python 中是否含有此类方法,或者有什么可以替代的语法?

**答 : ** Python 中没有此方法(函数),但却有其它可替代的功能语法

1,利用 in 操作符进行判断

if "blah" not in somestring: 
continue

2,string.find 来进行替代

此方法与 String.indexof(substring)相似,返回 substring 在 String 第一次出现的索引位置,不出现的话返回 -1;

s = "This be a string"
if s.find("is") == -1:
print("No 'is' here!")
else:
print("Found 'is' in the string.")

3, Python 怎样得到一个文件夹下的所有文件

1​,通过 ​os.listdir()​ 方法可以得到一个文件夹下的所有文件和文件夹,若只想得到文件,可以借助 os.path.isfile 来进行筛选

from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

2,​ 通过 os.walk()  对指定文件路径生成器得到两个列表,一个表示​文件列表​,一个表示​文件夹列表​,​如果只查看某个文件夹下的文件列表(不是包含的全部文件),只需在第一次生成时 break 中断一下​即可

from os import walk

f = []
for (dirpath, dirnames, filenames) in walk(mypath):
f.extend(filenames)
break

# 更简单的方法
(_, _, filenames) = walk(mypath).next()

4,理解 Python 中的切片符号

Python 中对数组、列表等数据类型进行切片操作很常见,但在切片操作中符号  ​:​  所在位置不同,导致最终切片效果也不一样,因此这个帖子来帮助我们认识 符号 ​:​  在切片不同位置的几个作用

1,​ 常见的几个切片操作

a[start:stop] # 得到索引为 start-stop-1的类目列表;
a[start:] # 得到索引为 start及以后 的类目列表;
a[:stop] # 得到索引为 0- stop-1 的类目列表;
a[:] # 得到全部索引列表;

2,​ 加入 ​step(步长)​ 参数之后的切片操作;

a[start:stop:step] # 得到从 start->stop-1 之间间隔为 step 的列表元素;

​a[start:stop:step]​​​ 与 ​​a[start:stop]​​ 最大区别是后者 step 默认设置为1;

3,​ start 与 stop 参数都为负时:

a[-1] # 得到最后一个元素;
a[-2:] # 得到最后两个元素;
a[:-2] # 得到源列表元素中去除后两个元素之后的元素列表

4,​ step 为负时

a[::-1]    # 得到数组中所有元素,并逆置
a[1::-1] # 前两个元素, 并逆置
a[:-3:-1] # 最后两个元素, 并逆置;
a[-3::-1] # 源列表元素中移除最后两个元素之后的元素列表, 并逆置

5,​ [] 与 slice() 对象之间的联系

用 ​​:​​​ 作为切片操作符 ​​[]​​​ 可作为 ​​slice()​​ 对象

a[start:stop:step]

等价于

a[slice(start, stop, step)]

5, Python 中如何以 value 为基准对字典进行排序?

Python 字典数据类型是以 键值对 {key:value} 组合得到,那如何 以 value 为基准对字典进行排序呢,有没有什么简单的方法?

1,​ Python 3.6+  sorted() + lambda 函数

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
{k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

2,​ 用 tuple 表示 dict 进行排序,完成后再转化为 dict;

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = dict(sorted(x.items(), key=operator.itemgetter(1)))

3,​ 借助于 collections 模块

import collections

sorted_dict = collections.OrderedDict(sorted_x)

好了以上就是本篇文章的全部内容了,最后感谢大家的阅读