当前位置: 首页 > 编程日记 > 正文

快收藏!整理了 100 个 Python 小技巧

作者:小F

来源: 法纳斯特

目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手。

你可以用它来完成很多任务,比如数据科学、机器学习、Web开发、脚本编写、自动化等。

下面,就给大家分享100个Python小技巧,帮助大家更好的了解和学习Python。

· 1·

for循环中的else条件

这是一个for-else方法,循环遍历列表时使用else语句。下面举个例子,比如我们想检查一个列表中是否包含奇数。那么可以通过for循环,遍历查找。如果找到了奇数,就会打印该数值,并且执行break语句,跳过else语句。没有的话,就不会执行break语句,而是执行else语句。

numbers = [2, 4, 6, 8, 1]for number in numbers:if number % 2 == 1:print(number)break
else:print("No odd numbers")

· 2·

从列表中获取元素,定义多个变量

my_list = [1, 2, 3, 4, 5]
one, two, three, four, five = my_list

· 3·

使用heapq模块,获取列表中n个最大最小元素

import heapqscores = [51, 33, 64, 87, 91, 75, 15, 49, 33, 82]print(heapq.nlargest(3, scores))  # [91, 87, 82]
print(heapq.nsmallest(5, scores))  # [15, 33, 33, 49, 51]

· 4·

将列表中的所有元素作为参数传递给函数

我们可以使用 * 号,提取列表中所有的元素

my_list = [1, 2, 3, 4]print(my_list)  # [1, 2, 3, 4]
print(*my_list)  # 1 2 3 4
如此便可以将列表中的所有元素,作为参数传递给函数
def sum_of_elements(*arg):total = 0for i in arg:total += ireturn totalresult = sum_of_elements(*[1, 2, 3, 4])
print(result)  # 10

· 5·

获取列表的所有中间元素

_, *elements_in_the_middle, _ = [1, 2, 3, 4, 5, 6, 7, 8]
print(elements_in_the_middle)  # [2, 3, 4, 5, 6, 7]

· 6·

使用一行代码赋值多个变量

one, two, three, four = 1, 2, 3, 4

· 7·

列表推导式

只用一行代码,便可完成对数组的迭代以及运算。比如,将列表中的每个数字提高一倍。

推导式不仅列表能用,字典、集合、生成器也能使用。下面看一下,使用字典推导式,将字典的值提高一倍。

numbers = [1, 2, 3, 4, 5]
squared_numbers = [num * num for num in numbers]print(squared_numbers) # [1, 4, 9, 16, 25]dictionary = {'a': 4, 'b': 5}
squared_dictionary = {key: num * num for (key, num) in dictionary.items()}print(squared_dictionary)  # {'a': 16, 'b': 25}

· 8·

通过Enum枚举同一标签或一系列常量的集合

枚举是绑定到唯一的常量值的一组符号名称(成员)。在枚举中,成员可以通过身份进行比较,枚举本身可以迭代。

from enum import Enumclass Status(Enum):NO_STATUS = -1NOT_STARTED = 0IN_PROGRESS = 1COMPLETED = 2print(Status.IN_PROGRESS.name)  # IN_PROGRESS
print(Status.COMPLETED.value)  # 2

· 9·

重复字符串

name = "Banana"
print(name * 4)  # BananaBananaBananaBanana

· 10·

比较3个数字的大小

如果想比较一个值和其他两个值的大小情况,你可以使用简单的数学表达式。

1 < x < 10

这个是最简单的代数表达式,在Python中也是可以使用的。

x = 3print(1 < x < 10)  # True
print(1 < x and x < 10)  # True

· 11·

使用1行代码合并字典

first_dictionary = {'name': 'Fan', 'location': 'Guangzhou'}
second_dictionary = {'name': 'Fan', 'surname': 'Xiao', 'location': 'Guangdong, Guangzhou'}result = first_dictionary | second_dictionaryprint(result)
# {'name': 'Fan', 'location': 'Guangdong, Guangzhou', 'surname': 'Xiao'}

· 12·

查找元组中元素的索引

books = ('Atomic habits', 'Ego is the enemy', 'Outliers', 'Mastery')print(books.index('Mastery'))   # 3

· 13·

将字符串转换为字符串列表

假设你在函数中获得输出,原本应该是一个列表,但实际上却是一个字符串。

input = "[1,2,3]"

你可能第一时间会想到使用索引或者正则表达式。实际上,使用ast模块的literal_eval方法就能搞定。

import astdef string_to_list(string):return ast.literal_eval(string)string = "[1, 2, 3]"
my_list = string_to_list(string)
print(my_list)  # [1, 2, 3]string = "[[1, 2, 3],[4, 5, 6]]"
my_list = string_to_list(string)
print(my_list)  # [[1, 2, 3], [4, 5, 6]]

· 14·

计算两数差值

计算出2个数字之间的差值。

def subtract(a, b):return a - bprint((subtract(1, 3)))  # -2
print((subtract(3, 1)))  # 2

上面的这个方法,需要考虑数值的先后顺序。

def subtract(a, b):return a - bprint((subtract(a=1, b=3)))  # -2
print((subtract(b=3, a=1)))  # -2

使用命名参数,安排顺序,这样就不会出错了。

· 15·

用一个print()语句打印多个元素

print(1, 2, 3, "a", "z", "this is here", "here is something else")

· 16·

在同一行打印多个元素

print("Hello", end="")
print("World")  # HelloWorldprint("Hello", end=" ")
print("World")  # Hello Worldprint('words',   'with', 'commas', 'in', 'between', sep=', ')
# words, with, commas, in, between

· 17·

打印多个值,每个值之间使用自定义分隔符

print("29", "01", "2022", sep="/")  # 29/01/2022print("name", "domain.com", sep="@")  # name@domain.com

· 18·

不能在变量名的开头使用数字

four_letters = "abcd" # this works4_letters = "abcd" # this doesn’t work

这是Python的变量命名规则。

· 19·

不能在变量名的开头使用运算符

+variable = "abcd"  # this doesn’t work

· 20·

数字的第一位不能是0

number = 0110 # this doesn't work

这个确实挺神奇的。

· 21·

在变量名的任何地方使用下划线

a______b = "abcd"  # this works_a_b_c_d = "abcd"  # this also works

这并不意味着,你可以无限使用,为了代码的易读性,还是需要合理使用。

· 22·

使用下划线分割数值较大的数字

print(1_000_000_000)  # 1000000000print(1_234_567)  # 1234567

如此,看到一大堆数字时,也能轻松阅读。

· 23·

反转列表

my_list = ['a', 'b', 'c', 'd']my_list.reverse()print(my_list)  # ['d', 'c', 'b', 'a']

· 24·

使用步进函数对字符串切片

my_string = "This is just a sentence"print(my_string[0:5])  # This# Take three steps forwardprint(my_string[0:10:3])  # Tsse

· 25·

反向切片

my_string = "This is just a sentence"print(my_string[10:0:-1])  # suj si sih# Take two steps forwardprint(my_string[10:0:-2])  # sjs i

· 26·

使用开始或结束索引进行切片

my_string = "This is just a sentence"
print(my_string[4:])  # is just a sentenceprint(my_string[:3])  # Thi

· 27·

/和//的区别

print(3/2)  # 1.5
print(3//2)  # 1

· 28·

==和is的区别

is:检查两个变量是否指向同一对象内存中

==:比较两个对象的值

first_list = [1, 2, 3]
second_list = [1, 2, 3]# 比较两个值
print(first_list == second_list)  # True# 是否指向同一内存
print(first_list is second_list)  
# Falsethird_list = first_listprint(third_list is first_list)  
# True

· 29·

合并字典

dictionary_one = {"a": 1, "b": 2}
dictionary_two = {"c": 3, "d": 4}merged = {**dictionary_one, **dictionary_two}print(merged)  # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

· 30·

检查字符串是否大于另一字符串

first = "abc"
second = "def"print(first < second)  # Truesecond = "ab"
print(first < second)  # False

· 31·

检查字符串是否以特定字符开头(不使用索引)

my_string = "abcdef"
print(my_string.startswith("b"))  # False

· 32·

使用id()查找变量的唯一id

print(id(1))  # 4325776624
print(id(2))  # 4325776656
print(id("string"))  # 4327978288

· 33·

整数、浮点数、字符串、布尔值和元组都是不可变的

当变量被赋值为整数、浮点数、字符串、布尔值、元组这些不可变类型后,该变量就会指向一个内存对象。

如果重新给变量再赋值,它的内存对象就会发生改变。

number = 1
print(id(number))  # 4325215472
print(id(1))  # 4325215472number = 3
print(id(number))  # 4325215536
print(id(1))  # 4325215472

· 34·

字符串和元组也是不可变的

此处再说明一次。

name = "Fatos"
print(id(name))  # 4422282544name = "fatos"
print(id(name))  # 4422346608

· 35·

列表、集合和字典都是可变的

这意味着发生更改时,不会改变其内存对象。

cities = ["Beijing", "Guangzhou", "chengdu"]
print(id(cities))  # 4482699712cities.append("Beijing")
print(id(cities))  # 4482699712

下面是字典。

my_set = {1, 2, 3, 4}
print(id(my_set))  # 4352726176my_set.add(5)
print(id(my_set))  # 4352726176

· 36·

把一个列表变成不可变的列表

使用frozenset()后,你就无法更改了。

my_set = frozenset(['a', 'b', 'c', 'd'])my_set.add("a")

· 37·

if-elif块可以在没有else块的情况下存在

但是elif不能在没有if语句之前独立存在。

def check_number(number):if number > 0:return "Positive"elif number == 0:return "Zero"return "Negative"print(check_number(1))  # Positive

· 38·

使用sorted()检查2个字符串是否为相同

def check_if_anagram(first_word, second_word):first_word = first_word.lower()second_word = second_word.lower()return sorted(first_word) == sorted(second_word)print(check_if_anagram("testinG", "Testing"))  # True
print(check_if_anagram("Here", "Rehe"))  # True
print(check_if_anagram("Know", "Now"))  # False

· 39·

获取字符的Unicode值

print(ord("A"))  # 65
print(ord("B"))  # 66
print(ord("C"))  # 66
print(ord("a"))  # 97

· 40·

获取字典的键

dictionary = {"a": 1, "b": 2, "c": 3}keys = dictionary.keys()
print(list(keys))  # ['a', 'b', 'c']

· 41·

获取字典的值

dictionary = {"a": 1, "b": 2, "c": 3}values = dictionary.values()
print(list(values))  # [1, 2, 3]

· 42·

交换字典的键、值位置

dictionary = {"a": 1, "b": 2, "c": 3}reversed_dictionary = {j: i for i, j in dictionary.items()}
print(reversed)  # {1: 'a', 2: 'b', 3: 'c'}

· 43·

将布尔值转换为数字

print(int(False))  # 0
print(float(True))  # 1.0

· 44·

在算术运算中使用布尔值

x = 10
y = 12result = (x - False)/(y * True)
print(result)  # 0.8333333333333334

· 45·

将任何数据类型转换为布尔值

print(bool(.0))  # False
print(bool(3))  # True
print(bool("-"))  # True
print(bool("string"))  # True
print(bool(" "))  # True

· 46·

将值转换为复数

print(complex(10, 2))  # (10+2j)

也可以将数字转换为十六进制数。

print(hex(11))  # 0xb

· 47·

在列表的第一个位置添加一个值

如果使用append(),将从列表的最后一个位置插入新值。

可以通过使用insert(),来指定插入新元素的索引和数值。

那么列表的第一个位置为0,即下标为0。

my_list = [3, 4, 5]my_list.append(6)
my_list.insert(0, 2)
print(my_list)  # [2, 3, 4, 5, 6]

· 48·

Lambda函数只能在一行代码中

无法通过多行代码,来使用lambda函数。

comparison = lambda x: if x > 3:print("x > 3")else:print("x is not greater than 3")

报错。

· 49·

Lambda中的条件语句应始终包含else语句

comparison = lambda x: "x > 3" if x > 3

运行上面的代码,报错。

这是由于条件表达式的特性,而不是lambda的导致的。

· 50·

使用filter(),获得一个新对象

my_list = [1, 2, 3, 4]odd = filter(lambda x: x % 2 == 1, my_list)print(list(odd))   # [1, 3]
print(my_list)  # [1, 2, 3, 4]

· 51·

map()返回一个新对象

map()函数将给定函数应用于可迭代对象(列表、元组等),然后返回结果(map对象)。

my_list = [1, 2, 3, 4]squared = map(lambda x: x ** 2, my_list)print(list(squared))   # [1, 4, 9, 16]
print(my_list)  # [1, 2, 3, 4]

· 52·

range()的step参数

map()函数将给定函数应用于可迭代对象(列表、元组等),然后返回结果(map对象)。

for number in range(1, 10, 3):print(number, end=" ")
# 1 4 7

· 53·

range()默认从0开始

map()函数将给定函数应用于可迭代对象(列表、元组等),然后返回结果(map对象)。

def range_with_zero(number):for i in range(0, number):print(i, end=' ')def range_with_no_zero(number):for i in range(number):print(i, end=' ')range_with_zero(3)  # 0 1 2
range_with_no_zero(3)  # 0 1 2

· 54·

不需要和0比较长度

如果长度大于0,则默认为True。

def get_element_with_comparison(my_list):if len(my_list) > 0:return my_list[0]def get_first_element(my_list):if len(my_list):return my_list[0]elements = [1, 2, 3, 4]
first_result = get_element_with_comparison(elements)
second_result = get_element_with_comparison(elements)print(first_result == second_result)  # True

· 55·

可以在同一个作用域内多次定义一个方法

但是,只有最后一个会被调用,覆盖以前。

def get_address():return "First address"def get_address():return "Second address"def get_address():return "Third address"print(get_address())  # Third address

· 56·

在外部直接访问私有属性

在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法。

如果想要在外部访问,那么只需要在名称前面加上 '_类名' 变成 '_类名__名称'。

class Engineer:def __init__(self, name):self.name = nameself.__starting_salary = 62000dain = Engineer('Dain')
print(dain._Engineer__starting_salary)  # 62000

· 57·

检查对象的内存使用情况

import sysprint(sys.getsizeof("bitcoin"))  # 56

· 58·

定义一个方法,可以调用任意个参数

def get_sum(*arguments):result = 0for i in arguments:result += ireturn resultprint(get_sum(1, 2, 3))  # 6
print(get_sum(1, 2, 3, 4, 5))  # 15
print(get_sum(1, 2, 3, 4, 5, 6, 7))  # 28

· 59·

使用super()或父类的名称调用父类的初始化

使用super函数调用父类的初始化方法。

class Parent:def __init__(self, city, address):self.city = cityself.address = addressclass Child(Parent):def __init__(self, city, address, university):super().__init__(city, address)self.university = universitychild = Child('Peking University', 'Fudan University', 'Tsinghua University')
print(child.university)  # Tsinghua University

使用父类的名称调用父类。

class Parent:def __init__(self, city, address):self.city = cityself.address = addressclass Child(Parent):def __init__(self, city, address, university):Parent.__init__(self, city, address)self.university = universitychild = Child('Peking University', 'Fudan University', 'Tsinghua University')
print(child.university)  # Tsinghua University

· 60·

在类中使用 + 操作符

在两个int数据类型之间使用 + 运算符时,将得到它们的和。

而在两个字符串数据类型之间使用它时,会将其合并。

print(10 + 1)  # 两数相加
print('first' + 'second')  # 字符串相加

这个就是操作符重载,你还可以在类中使用(__add__)。

class Expenses:def __init__(self, rent, groceries):self.rent = rentself.groceries = groceriesdef __add__(self, other):return Expenses(self.rent + other.rent,self.groceries + other.groceries)april_expenses = Expenses(1000, 200)
may_expenses = Expenses(1000, 300)total_expenses = april_expenses + may_expenses
print(total_expenses.rent)  # 2000
print(total_expenses.groceries)  # 500

· 61·

在类中使用 < 和 == 操作符

下面定义一个操作重载示例( < 操作符),使用__lt__方法。

class Game:def __init__(self, score):self.score = scoredef __lt__(self, other):return self.score < other.scorefirst = Game(1)
second = Game(2)print(first < second)  # True

同样的,== 操作符使用__eq__方法。

class Journey:def __init__(self, location, destination, duration):self.location = locationself.destination = destinationself.duration = durationdef __eq__(self, other):return ((self.location == other.location) and(self.destination == other.destination) and(self.duration == other.duration))first = Journey('Location A', 'Destination A', '30min')
second = Journey('Location B', 'Destination B', '30min')print(first == second)

还有一些其他的定义。

__sub__() for -
__mul__() for *
__truediv__() for /
__ne__() for !=
__ge__() for >=
__gt__() for >

· 62·

为类的对象定义自定义的可打印版本

class Rectangle:def __init__(self, a, b):self.a = aself.b = bdef __repr__(self):return repr('Rectangle with area=' + str(self.a * self.b))print(Rectangle(3, 4))  # 'Rectangle with area=12'

· 63·

交换字符串中字符的大小写

string = "This is just a sentence."
result = string.swapcase()print(result)  # tHIS IS JUST A SENTENCE.

· 64·

检查字符串是否都是空格

string = "  "
result = string.isspace()print(result)  # True

· 65·

检查字符串是否都是字母或数字

name = "Password"
print(name.isalnum())  # Truename = "Secure Password "
print(name.isalnum())  # Falsename = "S3cur3P4ssw0rd"
print(name.isalnum())  # Truename = "133"
print(name.isalnum())  # True

· 66·

检查字符串是否都是字母

string = "Name"
print(string.isalpha())  # Truestring = "Firstname Lastname"
print(string.isalpha())  # Falsestring = "P4ssw0rd"
print(string.isalpha())  # False

· 67·

根据参数删除字符

从右侧开始。

string = "This is a sentence with       "
print(string.rstrip())  # "This is a sentence with"string = "this here is a sentence…..,,,,aaaaasd"
print(string.rstrip(".,dsa"))  # "this here is a sentence"

同样的,左侧也能操作。

string = "ffffffffFirst"
print(string.lstrip("f"))  # First

· 68·

检查字符串是否为数字

string = "seven"
print(string.isdigit())  # Falsestring = "1337"
print(string.isdigit())  # Truestring = "5a"
print(string.isdigit())  # Falsestring = "2**5"
print(string.isdigit())  # False

· 69·

检查字符串是否为中文数字

# 42673
string = "四二六七三"print(string.isdigit())  # False
print(string.isnumeric())  # True

· 70·

检查字符串是否所有单词都是大写开头

string = "This is a sentence"
print(string.istitle())  # Falsestring = "10 Python Tips"
print(string.istitle())  # Truestring = "How to Print A String in Python"
# False
print(string.istitle())string = "PYTHON"
print(string.istitle())  # False

· 71·

在元组中使用负索引

numbers = (1, 2, 3, 4)print(numbers[-1])  # 4
print(numbers[-4])  # 1

· 72·

在元组中嵌套列表和元组

mixed_tuple = (("a"*10, 3, 4), ['first', 'second', 'third'])print(mixed_tuple[1])  # ['first', 'second', 'third']
print(mixed_tuple[0])  # ('aaaaaaaaaa', 3, 4)

· 73·

快速统计元素在列表中出现的次数

names = ["Besim", "Albert", "Besim", "Fisnik", "Meriton"]print(names.count("Besim"))  # 2

· 74·

使用slice()获取元素

使用slice()获取最后n个元素。

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
slicing = slice(-4, None)
print(my_list[slicing])  # [4, 5, 6]print(my_list[-3])  # 4

使用slice()做切片任务。

string = "Data Science"slice_object = slice(5, None)
print(string[slice_object])   # Science

· 75·

计算元素在元组中出现的次数

my_tuple = ('a', 1, 'f', 'a', 5, 'a')print(my_tuple.count('a'))  # 

· 76·

获取元组中元素的索引

my_tuple = ('a', 1, 'f', 'a', 5, 'a')print(my_tuple.index('f'))  #  2

· 77·

步进获得元组

my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)print(my_tuple[::3])  # (1, 4, 7, 10

· 78·

通过索引获取子元组

my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)print(my_tuple[3:])  # (4, 5, 6, 7, 8, 9, 10)

· 79·

将列表、集合、字典中所有元素删除

my_list = [1, 2, 3, 4]
my_list.clear()
print(my_list)  # []my_set = {1, 2, 3}
my_set.clear()
print(my_set)  # set()my_dict = {"a": 1, "b": 2}
my_dict.clear()
print(my_dict)  # {}

· 80·

合并集合

使用union()方法,返回一个新集合。

first_set = {4, 5, 6}
second_set = {1, 2, 3}print(first_set.union(second_set))  # {1, 2, 3, 4, 5, 6}

还可以使用update()方法,将第二个集合的元素插入到第一个集合中去。

first_set = {4, 5, 6}
second_set = {1, 2, 3}first_set.update(second_set)print(first_set)  # {1, 2, 3, 4, 5, 6}

· 81·

在函数里输出结果

def is_positive(number):print("Positive" if number > 0 else "Negative")  # Positiveis_positive(-3)

· 82·

if语句中的多个条件

math_points = 51
biology_points = 78
physics_points = 56
history_points = 72my_conditions = [math_points > 50, biology_points > 50,physics_points > 50, history_points > 50]if all(my_conditions):print("Congratulations! You have passed all of the exams.")
else:print("I am sorry, but it seems that you have to repeat at least one exam.")
# Congratulations! You have passed all of the exams.

· 83·

在一个if语句中,至少满足多个条件中的一个

math_points = 40
biology_points = 78
physics_points = 56
history_points = 72my_conditions = [math_points > 50, biology_points > 50,physics_points > 50, history_points > 50]if any(my_conditions):print("Congratulations! You have passed all of the exams.")
else:print("I am sorry, but it seems that you have to repeat at least one exam.")
# Congratulations! You have passed all of the exams.

· 84·

任何非空字符串都为True

print(bool("Non empty"))  # True
print(bool(""))  # False

· 85·

任何非空列表、元组、字典都为True

print(bool([]))  # False
print(bool(set([])))  # Falseprint(bool({}))  # False
print(bool({"a": 1}))  # True

· 86·

None、False、0都为False

print(bool(False))  # False
print(bool(None))  # False
print(bool(0))  # False

· 87·

在函数中使用全局变量

在函数无法直接修改全局变量的值。

string = "string"def do_nothing():string = "inside a method"do_nothing()print(string)  # string

可通过修饰符global,修改全局变量的值。

string = "string"def do_nothing():global stringstring = "inside a method"do_nothing()print(string)  # inside a method

· 88·

计算字符串或列表中元素的数量

使用collections中的Counter计算字符串或列表中元素的数量。

from collections import Counterresult = Counter("Banana")
print(result)  # Counter({'a': 3, 'n': 2, 'B': 1})result = Counter([1, 2, 1, 3, 1, 4, 1, 5, 1, 6])
print(result)  # Counter({1: 5, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1})

· 89·

检查2个字符串是否为相同

可以使用Counter()方法。

from collections import Counterdef check_if_anagram(first_string, second_string):first_string = first_string.lower()second_string = second_string.lower()return Counter(first_string) == Counter(second_string)print(check_if_anagram('testinG', 'Testing'))  # True
print(check_if_anagram('Here', 'Rehe'))  # True
print(check_if_anagram('Know', 'Now'))  # False

可以使用sorted()方法。

def check_if_anagram(first_word, second_word):first_word = first_word.lower()second_word = second_word.lower()return sorted(first_word) == sorted(second_word)print(check_if_anagram("testinG", "Testing"))  # True
print(check_if_anagram("Here", "Rehe"))  # True
print(check_if_anagram("Know", "Now"))  # False

· 90·

使用itertools中的count计算元素的数量

from itertools import countmy_vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']current_counter = count()string = "This is just a sentence."for i in string:if i in my_vowels:print(f"Current vowel: {i}")print(f"Number of vowels found so far: {next(current_counter)}")

输出如下

Current vowel: i
Number of vowels found so far: 0
Current vowel: i
Number of vowels found so far: 1
Current vowel: u
Number of vowels found so far: 2
Current vowel: a
Number of vowels found so far: 3
Current vowel: e
Number of vowels found so far: 4
Current vowel: e
Number of vowels found so far: 5
Current vowel: e
Number of vowels found so far: 6

· 91·

对字符串或列表的元素进行次数排序

collections模块的Counter(),默认情况下是不会根据元素的频率对它们进行排序的。

from collections import Counterresult = Counter([1, 2, 3, 2, 2, 2, 2])
print(result)  # Counter({2: 5, 1: 1, 3: 1})
print(result.most_common())  # [(2, 5), (1, 1), (3, 1)]

map()函数将给定函数应用于可迭代对象(列表、元组等),然后返回结果(map对象)。

· 92·

查找列表中出现频率最高的元素

my_list = ['1', 1, 0, 'a', 'b', 2, 'a', 'c', 'a']print(max(set(my_list), key=my_list.count))  # a

· 93·

copy()和deepcopy()的区别

浅拷贝: 拷贝父对象,但是不会拷贝对象的内部的子对象。

深拷贝: 拷贝父对象. 以及其内部的子对象。

下面是一个copy()的例子。

first_list = [[1, 2, 3], ['a', 'b', 'c']]second_list = first_list.copy()first_list[0][2] = 831print(first_list)  # [[1, 2, 831], ['a', 'b', 'c']]
print(second_list)  # [[1, 2, 831], ['a', 'b', 'c']]

这里是一个deepcopy()的例子。

import copyfirst_list = [[1, 2, 3], ['a', 'b', 'c']]second_list = copy.deepcopy(first_list)first_list[0][2] = 831print(first_list)  # [[1, 2, 831], ['a', 'b', 'c']]
print(second_list)  # [[1, 2, 3], ['a', 'b', 'c']]

· 94·

访问字典中不存在的键时,避免报错

如果你想访问字典一个不存在的键,代码会报错。

import copy
my_dictonary = {"name": "Name", "surname": "Surname"}
print(my_dictonary["age"])  

错误如下。

KeyError: 'age'

可以通过使用defaultdict(),代码将不会报错。

from collections import defaultdictmy_dictonary = defaultdict(str)
my_dictonary['name'] = "Name"
my_dictonary['surname'] = "Surname"print(my_dictonary["age"])  

· 95·

构建迭代器

class OddNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):x = self.aself.a += 2return xodd_numbers_object = OddNumbers()
iterator = iter(odd_numbers_object)print(next(iterator))  # 1
print(next(iterator))  # 3
print(next(iterator))  # 5

· 96·

删除列表的重复项

my_set = set([1, 2, 1, 2, 3, 4, 5])
print(list(my_set))  # [1, 2, 3, 4, 5]

· 97·

打印模块的安装位置

import pandasprint(pandas)  # <module 'torch' from '/Users/...'

· 98·

使用not in检查一个值是否在列表中

odd_numbers = [1, 3, 5, 7, 9]
even_numbers = []for i in range(9):if i not in odd_numbers:even_numbers.append(i)print(even_numbers)  # [0, 2, 4, 6, 8]

· 99·

sort()和sorted()的区别

groceries = ['milk', 'bread', 'tea']new_groceries = sorted(groceries)
# new_groceries = ['bread', 'milk', 'tea']print(new_groceries)# groceries = ['milk', 'bread', 'tea']
print(groceries)groceries.sort()# groceries = ['bread', 'milk', 'tea']
print(groceries)

· 100·

使用uuid模块生成唯一ID

UUID代表唯一标识符。

import uuid# 根据主机ID、序列号和当前时间生成UUID
print(uuid.uuid1())  # 308490b6-afe4-11eb-95f7-0c4de9a0c5af# 生成一个随机UUID
print(uuid.uuid4())  # 93bc700b-253e-4081-a358-24b60591076a


更多精彩推荐
深度学习三巨头共同发文,聊聊深度学习的过去、现在与未来二维已经 OUT 了?3DPose 实现三维人体姿态识别真香 | 代码干货GitHub 遭抵制!AI 代码生成神器竟成“抄袭工具”?

相关文章:

--single-transaction 参数对应MyISAM引擎和InnoDB引擎

结论&#xff1a;使用--single-transaction 备份含有MyISAM的表不会获得一致性备份&#xff0c;所有的innodb表可以获得事务开始时的一致性快照&#xff0c;但是MyISAM表获取的是备份该表时的最新快照&#xff0c; 测试库&#xff1a;test&#xff0c;包含表t1,t2,t3,t4,t5,t6 …

C#优化字符串操作【月儿原创】

C#优化字符串操作 作者&#xff1a;清清月儿 主页&#xff1a;http://blog.csdn.net/21aspnet/ 时间&#xff1a;2007.6.17 开发中可以说几乎随时会涉及到字符串处理&#xff0c;本人觉得很有必要把平时遇到的问题和大家一起讨论&#xff0c;如果大家有好的见解和…

构筑超异构计算时代,英特尔 AI 全布局

作者 | 伍杏玲出品 | AI 科技大本营&#xff08;ID:rgznai100&#xff09;我们正值数据井喷时代&#xff0c;据 IDC 发布《数据时代 2025》报告显示&#xff0c;全球每年产生的数据将从 2018 年的 33ZB 增长到 2025 年的 175ZB。其中大部分为非结构化数据&#xff0c;对数据实时…

[软件推荐]电子日记本EDiary,记下您 的每一天

推荐一款电子日记本EDiary&#xff0c;可以记下每天的工作与生活&#xff0c;可支持附件上传&#xff0c;使用方便简单&#xff0c;我从08年开始使用至今&#xff0c;感觉非常不错&#xff0c;也介绍给同事朋友使用&#xff0c;现给大家分享一下。可以到这里下载&#xff1a;ht…

C#的6种常用集合类大比拼【月儿原创】

C#的6种常用集合类大比拼 作者&#xff1a;清清月儿 主页&#xff1a;http://blog.csdn.net/21aspnet/ 时间&#xff1a;2007.6.27 说明&#xff1a;MSDN没有说出几种集合类其间的区别&#xff0c;当然欲知更多细节可参考MSDN。 一.先来说说数组的不足&#xf…

“35岁才是一个程序员成熟的开始!”

作者 | 王晓波&#xff0c;同程旅行机票事业群CTO【写在前面】不知道从什么时候开始&#xff0c;身边的“小朋友”们都开始为一件事感到焦虑&#xff0c;那就是&#xff1a;“到了35岁我还能找到一份编程的工作吗&#xff1f;”。坦白讲&#xff0c;我年轻的时候也有过迷茫的时…

centos安装easy_instal

easy_install与yum类似&#xff0c;使用easy_install&#xff0c;可以轻松在pypi软件库里面搜索python各类软件安装easy_install比较简单&#xff0c;如果配置好yum&#xff0c;就可以直接搜索python-setuptoolsyum –y install python-setuptools安装完python-setuptools之后&…

如何用xmanager远程连接centos6.0的桌面

在centos6.0系统上设置 修改custom.conf文件 vim /etc/gdm/custom.conf 在[security]下面添加 AllowRemoteRoottrue 在[xdmcp]下面添加 Port177 Enable1 修改完后效果如下&#xff1a; [daemon] [security] AllowRemoteRoottrue [xdmcp] Port177 Enable1 [greeter] [chooser] […

ASP.NET 3.5 企业级开发

议题 .NET Framework 3.5 和Visual Studio 2008 C# 面向对象程序设计 ASP.NET 状态管理和页面传值 ASP.NET 中的错误处理 ADO.NET与数据访问 架构与模式 安全与性能 优秀的团队开发管理功能C# 面向对象程序设计封装继承性多态性抽象类接口装箱和拆箱泛型ASP.NET 状态管理…

DEV报表之条形码

今天无意间发现DEV的报表居然自带条形码生成控件&#xff0c;正好要用到&#xff0c;省的自己手动生成图片了。前提&#xff1a;一张做好的报表Dev报表基础教程首先拖出XRBarCode控件&#xff0c;放到表头的空白位置&#xff0c;摆好高度宽度。选择Symbology&#xff0c;设置你…

Copilot 真会砸了程序员的饭碗?

作者 | 马超 责编 | 孙胜出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;最近OpenAI与GitHub联合构建的AI自动编程工具Copilot正式登场&#xff01;Copilot基于自然语言处理模型GPT-3搭建而成&#xff0c;可在程序员编写代码时提供建议&#xff0c;甚至直接补…

提升城镇化质量 有利于激活智慧城市潜能

国家发展改革委副主任胡祖才指出&#xff0c;智慧城市建设是中国新型城镇化的重要内容&#xff0c;也是推进我国新型城镇化建设的一项长期的任务。如何通过智慧城市建设&#xff0c;促进城市发展模式向资源节约型、环境友好型转变&#xff0c;城市管理由粗放型、经济型向精专化…

变量的属性(全局变量、局部变量、动态变量、静态变量等)

变量的属性 1、变量的分类 l 根据作用域&#xff1a;可分为全局变量和局部变量。 l 根据生存周期&#xff1a;可分为静态存储方式和动态存储方式&#xff0c;具体地又分为自动的&#xff08;auto&#xff09;、静态的&#xff08;static&#xff09;、寄…

Science论文:诺奖经济学家的经典决策模型,被AI挑战

在2019年DOTA2的顶级赛事TI8的正赛完成之后&#xff0c;OpenAI的人工智能战队与TI8的冠军OG举行了一场表演赛&#xff0c;在英雄阵容限定17个&#xff0c;部分道具和功能禁用的前提下&#xff0c;OpenAI以2&#xff1a;0完胜了OG&#xff0c;尤其值得一提的是第二场比赛仅用时1…

Canny算法源码,欢迎交流

http://blog.csdn.net/jianxiong8814/article/details/1563109 http://blog.csdn.net/assuper/article/details/6937130 存在的bug 在dsp http://bbs.csdn.net/topics/390445572

Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM)

续Provisioning Services 7.8 入门系列教程之十二 实现高可用性 可以使用 Boot Device Management 实用程序将 IP 和引导信息&#xff08;引导设备&#xff09;交付给目标设备&#xff0c;此方法可以取代传统的 DHCP、PXE 和 TFTP 方法。 如果使用此方法&#xff0c;当目标设备…

Memcached深度分析

Memcached是danga.com&#xff08;运营LiveJournal的技术团队&#xff09;开发的一套分布式内存对象缓存系统&#xff0c;用于在动态系统中减少数据库负载&#xff0c; 提升性能。关于这个东西&#xff0c;相信很多人都用过&#xff0c;本文意在通过对memcached的实现及代码分析…

【分享】 IT囧事

导读&#xff1a;企业的业务发展离不开信息化建设&#xff0c;信息系统的稳定运行更离不开IT运维的支持&#xff0c;许多生命期短暂或者使用效果不太好的IT系统&#xff0c;都是因为后期的维护和支持不到位&#xff0c;才导致前期投入的资金和人力付之东流&#xff0c;让人扼腕…

为什么掌握Linux对程序员这么重要……

人工智能、物联网、大数据时代&#xff0c;Linux正有着一统天下的趋势&#xff0c;几乎每个软件工程师岗位&#xff0c;都要求掌握Linux。可以说&#xff0c;打开 Linux 操作系统这扇门&#xff0c;你才是合格的软件工程师。如果不能熟练地操作 Linux&#xff0c;你基本上等于少…

Java并发编程有多难?这几个核心技术你掌握了吗?

本文主要内容索引 1、Java线程 2、线程模型 3、Java线程池 4、Future(各种Future) 5、Fork/Join框架 6、volatile 7、CAS&#xff08;原子操作&#xff09; 8、AQS&#xff08;并发同步框架&#xff09; 9、synchronized&#xff08;同步锁&#xff09; 10、并发队列&#xff0…

这届 AI 预测欧洲杯冠军,通通被打脸

持续了一个月的欧洲杯&#xff0c;终于落下帷幕。北京时间 7 月 12 日&#xff08;周一&#xff09;凌晨&#xff0c;本届欧洲杯决赛中&#xff0c;意大利对阵英格兰。两队在 120 分钟时间里 1-1 战平&#xff0c;意大利在欧洲杯中通过点球大战以 3:2击败英格兰夺冠。意大利上次…

资源的正确引用

对资源的引用应该发生在对资源的保护期间。 比如在所保护内hold住资源、local_bh_disable内hold住资源&#xff1b; 否则对资源的使用可能发生不一致的情况。 PS&#xff1a; 代码逻辑应该符合真实世界的合理逻辑。转载于:https://www.cnblogs.com/kernel521/p/4045976.html

给网站管理员的建议:创建可利用的、可抓取的网站

转载自 谷歌中文网站管理员博客 发表者 T.V. Raman&#xff0c;研究学者 原文&#xff1a; Webmaster tips for creating accessible, crawlable sites 发表于&#xff1a;2008年4月14日 上午10:47 Hubbell和我正在我们位于加州的家中度假。欢迎您随时 阅读在此之前我为网站管…

iptables如何开放被动模式的FTP服务

如何开放被动模式的FTP服务? 1.装载FTP追踪时的专用的模块; # modprobe nf_conntrack_ftp # lsmod | grep ftp 2.放行请求报文 命令连接&#xff1a; NEW&#xff0c;ESTABLISHED 数据连接&#xff1a; RELATED&#xff0c;ESTABLISHED #iptables -I INPUT -d 192.168.141.10 …

KNN 分类算法原理代码解析

作者 | Charmve来源 | 迈微AI研习社k-最近邻算法是基于实例的学习方法中最基本的&#xff0c;先介绍基x于实例学习的相关概念。基于实例的学习已知一系列的训练样例&#xff0c;很多学习方法为目标函数建立起明确的一般化描述&#xff1b;但与此不同&#xff0c;基于实例的学习…

Roadsend PHP-开源的PHP代码编译器

Roadsend PHP 是一个开源的php compiler, 可以将你的PHP代码编译成原生的二进制代码, 无需分发php源码. Roadsend 可以将你的PHP web项目编译成FastCGI的可执行文件,这样apache,nginx可以通过fastcgi方式和编译后的 程序进行通讯. 看起来,PHP 编写的程序可以和C编写的程序有同…

Android安卓开发中图片缩放讲解

安卓开发中应用到图片的处理时候&#xff0c;我们通常会怎么缩放操作呢&#xff0c;来看下面的两种做法&#xff1a; 方法1&#xff1a;按固定比例进行缩放 在开发一些软件&#xff0c;如新闻客户端&#xff0c;很多时候要显示图片的缩略图&#xff0c;由于手机屏幕限制&#x…

a标签是什么意思 怎么使用?

转自&#xff1a;https://www.imooc.com/qadetail/190881 (1) a标签的作用&#xff1a;超链接&#xff0c;用于跳转到别的网页。 (2) a标签的用法&#xff1a;<a href"网址" target"_blank" >到百度首页</a> 其中target是a标签的一个属性&…

【Java】Lucene检索引擎详解

基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用&#xff0c;而是是一个用Java写的全文索引引擎工具包&#xff0c;它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 Lucene的作者&#xff1a;Lucene的贡献者Doug Cutting是一位资深全…

大手笔 !Julia Computing 获 2400 万美元融资,前 Snowflake CEO 加入董事会

整理 | 梦依丹出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;2021 年 7 月 19 日&#xff0c;由 Julia 高性能编程语言创始人成立的 Julia Computing 公司完成了 2400 万美元的 A 轮融资&#xff0c;这笔融资由 Dorilton Ventures 领投&#xff0c;Menlo Ventures…