美文网首页
python常识(二)

python常识(二)

作者: Brucezen | 来源:发表于2020-11-11 16:48 被阅读0次

list.sort( key=None, reverse=False)

key -- 只有一个传入参数的函数,参数取自于可迭代对象中

reverse=True表示降序, reverse=False表示升序

该方法没有返回值,但会改变原列表

>>># 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
 
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
 
# 指定第二个元素排序
random.sort(key=takeSecond)
 
# 输出类别
print ('排序列表:', random)

排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]


列表作为队列使用(“先进先出”), collections.deque被设计用于快速地从两端操作

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")           # Terry arrives
>>> queue.append("Graham")          # Graham arrives
>>> queue.popleft()                 # The first to arrive now leaves
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

一些编程小技巧

# 构造一个元素位置与原列表相对一致的新列表
>>>[(x, y) for i,x in enumerate([1,2,3]) for j,y in enumerate([3,1,4]) if i==j]
[(1, 3), (2, 1), (3, 4)]

# 从一个多维列表中取出最内层列表的每一个元素
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

# 矩阵的转置
>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]
>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]


zip(*iterables)函数, 创建一个聚合了来自每个可迭代对象中的元素的迭代器.
返回一个元组的迭代器,其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。
当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。
# zip('ABCD', 'xy') --> Ax By

>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True

del语句的使用,, 移除列表的一个元素,一个切片,甚至清空整个列表

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]
# 也可以删除整个变量, 此后再引用 a 时会报错
>>> del a

关于集合类型
集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。
集合对象也支持像 联合,交集,差集,对称差分等数学运算。
类似于<u>列表推导式</u>,集合也支持推导式形式
花括号或 set() 函数可以用来创建集合。
注意:要创建一个空集合你只能用 set() 而不能用 {},因为后者是创建一个空字典

>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b                              # letters in a or b or both
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # letters in both a and b
{'a', 'c'}
>>> a ^ b                              # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}

# 推导式形式
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

关于字典:
可以用 del 来删除一个键值对。
对一个字典执行 list(d) 将返回包含该字典中所有键的列表,按插入次序排列
(如需其他排序,则要使用 sorted(d))。
要检查字典中是否存在一个特定键,可使用 in 关键字。

# 添加新键值对
>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}

# 删除键值对
>>> del tel['sape']

# 返回包含所有键的列表
>>> list(tel)
['jack', 'guido']

# 按键升序排序
>>> sorted(tel)
['guido', 'jack']

# dict() 构造函数可以直接从键值对序列里创建字典。
>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}

# 此外,字典推导式可以从任意的键值表达式中创建字典
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

# 接通过关键字参数来指定键值对
>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}

**比较操作符innot in校验一个值是否在一个序列里;操作符isis not比较两个对象是不是同一个对象.
所有的比较操作符的优先级都比数值运算符低.
and or not中,优先级not > and > or
因此A and not B or C 等价于 (A and (not B)) or C
布尔运算符 andor 也被称为 短路 运算符:它们的参数从左至右解析,一旦可以确定结果解析就会停止。
例如,如果 AC 为真而 B 为假,那么 A and B and C 不会解析 C
**

>>>print(0 or 'a' or 'b')
a
>>>print(0 and 'a' and 'b')
0

关于海象运算符:=Python 3.8 新增功能,把变量赋值和使用合在一起。这个是新加的语法,3.8之前不支持。

if (n := len(a)) > 10:
    pass

# 相当于

n = len(a)
if n > 10:
    pass

关于序列比较:
序列对象通常可以与相同序列类型的其他对象比较。
首先比较开头的两个对应元素,如果两者不相等则比较结果就由此确定;
如果两者相等则比较之后的两个元素,以此类推,直到有一个序列被耗尽。
如果要比较的两个元素本身又是相同类型的序列,则会递归地执行上述顺序比较。
比如t1 = (1, 2, ('aa', 'ab')) ,t2 = (1, 2, ('abc', 'a'), 4)
比较双方的第一个元素,它们都是1 -> 第二个元素,都是2 -> 第三个元素,分别是 ('aa', 'ab')('abc', 'a')
(接着在内部进行了这样的比较: -> 'aa''abc' ->'a''a' ->'a''b')
至此由于'a'<'b',因此我们可以知道t1 < t2
另外,如果一个序列是另一个的初始子序列,则较短的序列被视为较小

>>>(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)
True
>>>(1, 2, 3, 4)           < (1, 2, 4)
True
>>>(1, 2)                 < (1, 2, -1)
True

关于函数标注:
函数标注 以字典的形式存放在函数的 __annotations__ 属性中,并且不会影响函数的任何其他部分。
形参标注的定义方式是在形参名称后加上冒号,后面跟一个表达式,该表达式会被求值为标注的值。
返回值标注的定义方式是加上一个组合符号 ->,后面跟一个表达式

>>> def f(ham: str, eggs: str = 'eggs') -> str:
...     print("Annotations:", f.__annotations__)
...     print("Arguments:", ham, eggs)
...     return ham + ' and ' + eggs
...
>>> f('spam')
Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}
Arguments: spam eggs
'spam and eggs'

相关文章

  • python常识(二)

    list.sort( key=None, reverse=False) key -- 只有一个传入参数的函数,参数...

  • 6.Python简介与语法常识

    Python简介与语法常识 本文章将简单介绍Python的发展历史和语言特点、语法常识。熟知这些语法常识、语法特点...

  • Python相关文章索引(11)

    基本常识 python 使用set对列表去重,并保持列表原来顺序 python基础-python函数any()与a...

  • Python第一课

    学习重点:Python概述、计算机常识、编程语言、搭建Python开发环境、Python程序的编辑和执行、Pyth...

  • Python相关文章索引(12)

    基本常识 Python多级排序(多属性排序)csv文件 python re的findall和finditer py...

  • python的30个冷知识

    目录 基本常识 数据结构部分 输入输出函数部分 基本常识 Python没有switch/ case 语句。 如何中...

  • Python相关文章索引(13)

    基本常识 Python-去除字符串中不想要的字符 Python split()方法 strip()默认去除的空白字...

  • Python for Windows 中文编码汇总

    关于python编码的基本常识在python里面 "明文"是unicode类型 "密文"是其他的编码格式 如gbk...

  • Python 小常识

    Python 命名规范 Python之父Guido推荐的命名规范包括如下几点: 1. 模块名和包名采用小写字母并且...

  • python爬虫常识

    一、简述aiohttp、Scrapy、ScrapyRedis、Requests、Selenium 五个爬虫框架都各...

网友评论

      本文标题:python常识(二)

      本文链接:https://www.haomeiwen.com/subject/vfmebktx.html