Python3.5列表索引快捷键及DataFrame列名提取简便方法问询
嘿,我来帮你搞定这两个问题!
一、Python 3.5里列表索引的快捷操作
首先得明确:Python语言本身并没有专门的“列表索引快捷键”,但如果是指快速操作列表元素的语法/写法,或者交互式环境里的便捷操作,我给你整理几个实用的:
- 如果是在IPython/Jupyter这类交互式环境里,直接写
列表名[索引]就是最快的访问方式,比如my_list[0]取第一个元素,my_list[-1]取最后一个元素(这个负索引的写法超实用!) - 切片语法是批量提取元素的快捷方式:
my_list[1:3]取第2到第3个元素,my_list[:]复制整个列表,my_list[::2]隔一个取元素 - 如果是编辑器里的快捷键,那要看你用的工具,比如VS Code里用
Ctrl+Space补全列表名,PyCharm里有代码生成的快捷方式,但这不是Python语言层面的哦
二、提取游标列名的简便方法(当然能用zip()!)
你原来的写法确实有点繁琐,针对cursor.description的结构,我们有好几种简洁的方式提取列名,包括用zip()的实现:
方法1:最直观的列表推导
直接遍历cursor.description里的每个元组,取第一个元素(也就是列名):
import pandas as pd columns = [col[0] for col in cursor.description] frame = pd.DataFrame(rows, columns=columns)
这个写法比你用range(len(...))的方式清爽太多,直接遍历元素而不是索引,更符合Python的风格。
方法2:用zip()实现的极简写法
完全可以用zip()!这里的技巧是用解包操作*配合zip():
columns = next(zip(*cursor.description)) frame = pd.DataFrame(rows, columns=columns)
给你拆解一下这个写法的逻辑:
*cursor.description把cursor.description里的每个元组都拆成独立的参数传给zip(),相当于zip(('a', ...), ('b', ...), ('c', ...), ...)zip()会把所有元组的对应位置元素打包,第一个打包结果就是所有列名组成的元组next()取出这个zip迭代器的第一个元素(也就是列名元组),pandas的DataFrame接受元组作为columns参数,完全没问题
方法3:用map()的简洁写法
如果你喜欢用map(),也可以这样写:
columns = list(map(lambda x: x[0], cursor.description)) frame = pd.DataFrame(rows, columns=columns)
这几种方法里,方法1和方法2都是非常推荐的,尤其是方法2,用zip()的写法既简洁又Pythonic,代码量最少。
内容的提问来源于stack exchange,提问作者Yannis Yuan
相关产品推荐
相关产品推荐

