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)
好了以上就是本篇文章的全部内容了,最后感谢大家的阅读!