前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >收藏喜+1!值得使用的100个Python小技巧

收藏喜+1!值得使用的100个Python小技巧

作者头像
AI科技大本营
发布2023-05-08 13:55:36
3350
发布2023-05-08 13:55:36
举报

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

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

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

▍1、for循环中的else条件

这是一个for-else方法,循环遍历列表时使用else语句。

下面举个例子,比如我们想检查一个列表中是否包含奇数。

那么可以通过for循环,遍历查找。

代码语言:javascript
复制
numbers?=?[2,?4,?6,?8,?1]

for?number?in?numbers:
????if?number?%?2?==?1:
????????print(number)
????????break
else:
????print("No?odd?numbers")

如果找到了奇数,就会打印该数值,并且执行break语句,跳过else语句。

没有的话,就不会执行break语句,而是执行else语句。

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

代码语言:javascript
复制
my_list?=?[1,?2,?3,?4,?5]
one,?two,?three,?four,?five?=?my_list

▍3、使用heapq模块,获取列表中n个最大或最小的元素

代码语言:javascript
复制
import?heapq

scores?=?[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、将列表中的所有元素作为参数传递给函数

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

代码语言:javascript
复制
my_list?=?[1,?2,?3,?4]

print(my_list)??#?[1,?2,?3,?4]
print(*my_list)??#?1?2?3?4

如此便可以将列表中的所有元素,作为参数传递给函数

代码语言:javascript
复制
def?sum_of_elements(*arg):
????total?=?0
????for?i?in?arg:
????????total?+=?i

????return?total


result?=?sum_of_elements(*[1,?2,?3,?4])
print(result)??#?10

▍5、获取列表的所有中间元素

代码语言:javascript
复制
_,?*elements_in_the_middle,?_?=?[1,?2,?3,?4,?5,?6,?7,?8]
print(elements_in_the_middle)??#?[2,?3,?4,?5,?6,?7]

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

代码语言:javascript
复制
one,?two,?three,?four?=?1,?2,?3,?4

▍7、列表推导式

只用一行代码,便可完成对数组的迭代以及运算。

比如,将列表中的每个数字提高一倍。

代码语言:javascript
复制
numbers?=?[1,?2,?3,?4,?5]
squared_numbers?=?[num?*?num?for?num?in?numbers]

print(squared_numbers)?#?[1,?4,?9,?16,?25]

推导式不仅列表能用,字典、集合、生成器也能使用。

下面看一下,使用字典推导式,将字典的值提高一倍。

代码语言:javascript
复制
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枚举同一标签或一系列常量的集合

枚举是绑定到唯一的常量值的一组符号名称(成员)。

在枚举中,成员可以通过身份进行比较,枚举本身可以迭代。

代码语言:javascript
复制
from?enum?import?Enum


class?Status(Enum):
????NO_STATUS?=?-1
????NOT_STARTED?=?0
????IN_PROGRESS?=?1
????COMPLETED?=?2


print(Status.IN_PROGRESS.name)??#?IN_PROGRESS
print(Status.COMPLETED.value)??#?2

▍9、重复字符串

代码语言:javascript
复制
name?=?"Banana"
print(name?*?4)??#?BananaBananaBananaBanana

▍10、比较3个数字的大小

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

代码语言:javascript
复制
1?<?x?<?10

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

代码语言:javascript
复制
x?=?3

print(1?<?x?<?10)??#?True
print(1?<?x?and?x?<?10)??#?True

▍11、使用1行代码合并字典

代码语言:javascript
复制
first_dictionary?=?{'name':?'Fan',?'location':?'Guangzhou'}
second_dictionary?=?{'name':?'Fan',?'surname':?'Xiao',?'location':?'Guangdong,?Guangzhou'}

result?=?first_dictionary?|?second_dictionary

print(result)
#?{'name':?'Fan',?'location':?'Guangdong,?Guangzhou',?'surname':?'Xiao'}

▍12、查找元组中元素的索引

代码语言:javascript
复制
books?=?('Atomic?habits',?'Ego?is?the?enemy',?'Outliers',?'Mastery')

print(books.index('Mastery'))???#?3

▍13、将字符串转换为字符串列表

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

代码语言:javascript
复制
input?=?"[1,2,3]"

你可能第一时间会想到使用索引或者正则表达式。

实际上,使用ast模块的literal_eval方法就能搞定。

代码语言:javascript
复制
import?ast


def?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个数字之间的差值。

代码语言:javascript
复制
def?subtract(a,?b):
????return?a?-?b


print((subtract(1,?3)))??#?-2
print((subtract(3,?1)))??#?2

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

代码语言:javascript
复制
def?subtract(a,?b):
????return?a?-?b


print((subtract(a=1,?b=3)))??#?-2
print((subtract(b=3,?a=1)))??#?-2

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

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

代码语言:javascript
复制
print(1,?2,?3,?"a",?"z",?"this?is?here",?"here?is?something?else")

▍16、在同一行打印多个元素

代码语言:javascript
复制
print("Hello",?end="")
print("World")??#?HelloWorld

print("Hello",?end="?")
print("World")??#?Hello?World

print('words',???'with',?'commas',?'in',?'between',?sep=',?')
#?words,?with,?commas,?in,?between

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

代码语言:javascript
复制
print("29",?"01",?"2022",?sep="/")??#?29/01/2022

print("name",?"domain.com",?sep="@")??#?name@domain.com

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

代码语言:javascript
复制
four_letters?=?"abcd"?#?this?works

4_letters?=?"abcd"?#?this?doesn’t?work

这是Python的变量命名规则。

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

代码语言:javascript
复制
+variable?=?"abcd"??#?this?doesn’t?work

▍20、数字的第一位不能是0

代码语言:javascript
复制
number?=?0110?#?this?doesn't?work

这个确实挺神奇的。

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

代码语言:javascript
复制
a______b?=?"abcd"??#?this?works
_a_b_c_d?=?"abcd"??#?this?also?works

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

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

代码语言:javascript
复制
print(1_000_000_000)??#?1000000000
print(1_234_567)??#?1234567

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

▍23、反转列表

代码语言:javascript
复制
my_list?=?['a',?'b',?'c',?'d']

my_list.reverse()

print(my_list)??#?['d',?'c',?'b',?'a']

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

代码语言:javascript
复制
my_string?=?"This?is?just?a?sentence"
print(my_string[0:5])??#?This

#?Take?three?steps?forward
print(my_string[0:10:3])??#?Tsse

▍25、反向切片

代码语言:javascript
复制
my_string?=?"This?is?just?a?sentence"
print(my_string[10:0:-1])??#?suj?si?sih

#?Take?two?steps?forward
print(my_string[10:0:-2])??#?sjs?i

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

代码语言:javascript
复制
my_string?=?"This?is?just?a?sentence"
print(my_string[4:])??#?is?just?a?sentence

print(my_string[:3])??#?Thi

▍27、/和//的区别

代码语言:javascript
复制
print(3/2)??#?1.5
print(3//2)??#?1

▍28、==和is的区别

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

==:比较两个对象的值

代码语言:javascript
复制
first_list?=?[1,?2,?3]
second_list?=?[1,?2,?3]

#?比较两个值
print(first_list?==?second_list)??#?True

#?是否指向同一内存
print(first_list?is?second_list)??
#?False


third_list?=?first_list

print(third_list?is?first_list)??
#?True

▍29、合并字典

代码语言:javascript
复制
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、检查字符串是否大于另一字符串

代码语言:javascript
复制
first?=?"abc"
second?=?"def"

print(first?<?second)??#?True

second?=?"ab"
print(first?<?second)??#?False

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

代码语言:javascript
复制
my_string?=?"abcdef"
print(my_string.startswith("b"))??#?False

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

代码语言:javascript
复制
print(id(1))??#?4325776624
print(id(2))??#?4325776656
print(id("string"))??#?4327978288

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

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

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

代码语言:javascript
复制
number?=?1
print(id(number))??#?4325215472
print(id(1))??#?4325215472

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

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

此处再说明一次。

代码语言:javascript
复制
name?=?"Fatos"
print(id(name))??#?4422282544

name?=?"fatos"
print(id(name))??#?4422346608

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

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

代码语言:javascript
复制
cities?=?["Beijing",?"Guangzhou",?"chengdu"]
print(id(cities))??#?4482699712

cities.append("Beijing")
print(id(cities))??#?4482699712

下面是字典。

代码语言:javascript
复制
my_set?=?{1,?2,?3,?4}
print(id(my_set))??#?4352726176

my_set.add(5)
print(id(my_set))??#?4352726176

▍36、把一个列表变成不可变的列表

代码语言:javascript
复制
my_set?=?frozenset(['a',?'b',?'c',?'d'])

my_set.add("a")

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

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

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

代码语言:javascript
复制
def?check_number(number):
????if?number?>?0:
????????return?"Positive"
????elif?number?==?0:
????????return?"Zero"

????return?"Negative"


print(check_number(1))??#?Positive

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

代码语言:javascript
复制
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值

代码语言:javascript
复制
print(ord("A"))??#?65
print(ord("B"))??#?66
print(ord("C"))??#?66
print(ord("a"))??#?97

▍40、获取字典的键

代码语言:javascript
复制
dictionary?=?{"a":?1,?"b":?2,?"c":?3}

keys?=?dictionary.keys()
print(list(keys))??#?['a',?'b',?'c']

▍41、获取字典的值

代码语言:javascript
复制
dictionary?=?{"a":?1,?"b":?2,?"c":?3}

values?=?dictionary.values()
print(list(values))??#?[1,?2,?3]

▍42、交换字典的键、值位置

代码语言:javascript
复制
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、将布尔值转换为数字

代码语言:javascript
复制
print(int(False))??#?0
print(float(True))??#?1.0

▍44、在算术运算中使用布尔值

代码语言:javascript
复制
x?=?10
y?=?12

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

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

代码语言:javascript
复制
print(bool(.0))??#?False
print(bool(3))??#?True
print(bool("-"))??#?True
print(bool("string"))??#?True
print(bool("?"))??#?True

▍46、将值转换为复数

代码语言:javascript
复制
print(complex(10,?2))??#?(10+2j)

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

代码语言:javascript
复制
print(hex(11))??#?0xb

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

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

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

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

代码语言:javascript
复制
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函数。

代码语言:javascript
复制
comparison?=?lambda?x:?if?x?>?3:
????????????????????print("x?>?3")
????????????????else:
????????????????????print("x?is?not?greater?than?3")

报错。

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

代码语言:javascript
复制
comparison?=?lambda?x:?"x?>?3"?if?x?>?3

运行上面的代码,报错。

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

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

代码语言:javascript
复制
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对象)。

代码语言:javascript
复制
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参数

代码语言:javascript
复制
for?number?in?range(1,?10,?3):
????print(number,?end="?")
#?1?4?7

▍53、range()默认从0开始

代码语言:javascript
复制
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。

代码语言:javascript
复制
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、可以在同一个作用域内多次定义一个方法

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

代码语言:javascript
复制
def?get_address():
????return?"First?address"


def?get_address():
????return?"Second?address"


def?get_address():
????return?"Third?address"


print(get_address())??#?Third?address

▍56、在外部直接访问私有属性

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

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

代码语言:javascript
复制
class?Engineer:
????def?__init__(self,?name):
????????self.name?=?name
????????self.__starting_salary?=?62000


dain?=?Engineer('Dain')
print(dain._Engineer__starting_salary)??#?62000

▍57、检查对象的内存使用情况

代码语言:javascript
复制
import?sys

print(sys.getsizeof("bitcoin"))??#?56

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

代码语言:javascript
复制
def?get_sum(*arguments):
????result?=?0
????for?i?in?arguments:
????????result?+=?i
????return?result


print(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函数调用父类的初始化方法。

代码语言:javascript
复制
class?Parent:
????def?__init__(self,?city,?address):
????????self.city?=?city
????????self.address?=?address


class?Child(Parent):
????def?__init__(self,?city,?address,?university):
????????super().__init__(city,?address)
????????self.university?=?university


child?=?Child('Peking University',?'Fudan University',?'Tsinghua University')
print(child.university)??#?Tsinghua University

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

代码语言:javascript
复制
class?Parent:
????def?__init__(self,?city,?address):
????????self.city?=?city
????????self.address?=?address


class?Child(Parent):
????def?__init__(self,?city,?address,?university):
????????Parent.__init__(self,?city,?address)
????????self.university?=?university


child?=?Child('Peking University',?'Fudan University',?'Tsinghua University')
print(child.university)??#?Tsinghua University

▍60、在类中使用 + 操作符

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

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

代码语言:javascript
复制
print(10?+?1)??# 两数相加
print('first'?+?'second')??#?字符串相加

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

代码语言:javascript
复制
class?Expenses:
????def?__init__(self,?rent,?groceries):
????????self.rent?=?rent
????????self.groceries?=?groceries

????def?__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__方法。

代码语言:javascript
复制
class?Game:
????def?__init__(self,?score):
????????self.score?=?score

????def?__lt__(self,?other):
????????return?self.score?<?other.score


first?=?Game(1)
second?=?Game(2)

print(first?<?second)??#?True

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

代码语言:javascript
复制
class?Journey:
????def?__init__(self,?location,?destination,?duration):
????????self.location?=?location
????????self.destination?=?destination
????????self.duration?=?duration

????def?__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)

还有一些其他的定义。

代码语言:javascript
复制
__sub__()?for?-
__mul__()?for?*
__truediv__()?for?/
__ne__()?for?!=
__ge__()?for?>=
__gt__()?for?>

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

代码语言:javascript
复制
class?Rectangle:
????def?__init__(self,?a,?b):
????????self.a?=?a
????????self.b?=?b

????def?__repr__(self):
????????return?repr('Rectangle?with?area='?+?str(self.a?*?self.b))


print(Rectangle(3,?4))??#?'Rectangle?with?area=12'

▍63、交换字符串中字符的大小写

代码语言:javascript
复制
string?=?"This?is?just?a?sentence."
result?=?string.swapcase()

print(result)??#?tHIS?IS?JUST?A?SENTENCE.

▍64、检查字符串是否都是空格

代码语言:javascript
复制
string?=?"??"
result?=?string.isspace()

print(result)??#?True

▍65、检查字符串是否都是字母或数字

代码语言:javascript
复制
name?=?"Password"
print(name.isalnum())??#?True

name?=?"Secure?Password?"
print(name.isalnum())??#?False

name?=?"S3cur3P4ssw0rd"
print(name.isalnum())??#?True

name?=?"133"
print(name.isalnum())??#?True

▍66、检查字符串是否都是字母

代码语言:javascript
复制
string?=?"Name"
print(string.isalpha())??#?True

string?=?"Firstname?Lastname"
print(string.isalpha())??#?False

string?=?"P4ssw0rd"
print(string.isalpha())??#?False

▍67、根据参数删除字符

从右侧开始。

代码语言:javascript
复制
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"

同样的,左侧也能操作。

代码语言:javascript
复制
string?=?"ffffffffFirst"
print(string.lstrip("f"))??#?First

▍68、检查字符串是否为数字

代码语言:javascript
复制
string?=?"seven"
print(string.isdigit())??#?False

string?=?"1337"
print(string.isdigit())??#?True

string?=?"5a"
print(string.isdigit())??#?False

string?=?"2**5"
print(string.isdigit())??#?False

▍69、检查字符串是否为中文数字

代码语言:javascript
复制
#?42673
string?=?"四二六七三"

print(string.isdigit())??#?False
print(string.isnumeric())??#?True

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

代码语言:javascript
复制
string?=?"This?is?a?sentence"
print(string.istitle())??#?False

string?=?"10?Python?Tips"
print(string.istitle())??#?True

string?=?"How?to?Print?A?String?in?Python"
#?False
print(string.istitle())

string?=?"PYTHON"
print(string.istitle())??#?False

▍71、在元组中使用负索引

代码语言:javascript
复制
numbers?=?(1,?2,?3,?4)

print(numbers[-1])??#?4
print(numbers[-4])??#?1

▍72、在元组中嵌套列表和元组

代码语言:javascript
复制
mixed_tuple?=?(("a"*10,?3,?4),?['first',?'second',?'third'])

print(mixed_tuple[1])??#?['first',?'second',?'third']
print(mixed_tuple[0])??#?('aaaaaaaaaa',?3,?4)

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

代码语言:javascript
复制
names?=?["Besim",?"Albert",?"Besim",?"Fisnik",?"Meriton"]

print(names.count("Besim"))??#?2

▍74、使用slice()获取元素

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

代码语言:javascript
复制
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()做切片任务。

代码语言:javascript
复制
string?=?"Data?Science"

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

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

代码语言:javascript
复制
my_tuple?=?('a',?1,?'f',?'a',?5,?'a')

print(my_tuple.count('a'))??#?3

▍76、获取元组中元素的索引

代码语言:javascript
复制
my_tuple?=?('a',?1,?'f',?'a',?5,?'a')

print(my_tuple.index('f'))??#??2

▍77、步进获得元组

代码语言:javascript
复制
my_tuple?=?(1,?2,?3,?4,?5,?6,?7,?8,?9,?10)

print(my_tuple[::3])??#?(1,?4,?7,?10)

▍78、通过索引获取子元组

代码语言:javascript
复制
my_tuple?=?(1,?2,?3,?4,?5,?6,?7,?8,?9,?10)

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

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

代码语言:javascript
复制
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()方法,返回一个新集合。

代码语言:javascript
复制
first_set?=?{4,?5,?6}
second_set?=?{1,?2,?3}

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

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

代码语言:javascript
复制
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、在函数里输出结果

代码语言:javascript
复制
def?is_positive(number):
????print("Positive"?if?number?>?0?else?"Negative")??#?Positive


is_positive(-3)

▍82、if语句中的多个条件

代码语言:javascript
复制
math_points?=?51
biology_points?=?78
physics_points?=?56
history_points?=?72

my_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语句中,至少满足多个条件中的一个

代码语言:javascript
复制
math_points?=?40
biology_points?=?78
physics_points?=?56
history_points?=?72

my_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

代码语言:javascript
复制
print(bool("Non?empty"))??#?True
print(bool(""))??#?False

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

代码语言:javascript
复制
print(bool([]))??#?False
print(bool(set([])))??#?False

print(bool({}))??#?False
print(bool({"a":?1}))??#?True

▍86、None、False、0都为False

代码语言:javascript
复制
print(bool(False))??#?False
print(bool(None))??#?False
print(bool(0))??#?False

▍87、在函数中使用全局变量

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

代码语言:javascript
复制
string?=?"string"


def?do_nothing():
??string?=?"inside?a?method"


do_nothing()

print(string)??#?string

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

代码语言:javascript
复制
string?=?"string"


def?do_nothing():
????global?string
????string?=?"inside?a?method"


do_nothing()

print(string)??#?inside?a?method

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

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

代码语言:javascript
复制
from?collections?import?Counter

result?=?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()方法。

代码语言:javascript
复制
from?collections?import?Counter


def?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()方法。

代码语言:javascript
复制
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计算元素的数量

代码语言:javascript
复制
from?itertools?import?count

my_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)}")

输出如下。

代码语言:javascript
复制
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(),默认情况下是不会根据元素的频率对它们进行排序的。

代码语言:javascript
复制
from?collections?import?Counter

result?=?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、查找列表中出现频率最高的元素

代码语言:javascript
复制
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()的例子。

代码语言:javascript
复制
first_list?=?[[1,?2,?3],?['a',?'b',?'c']]

second_list?=?first_list.copy()

first_list[0][2]?=?831

print(first_list)??#?[[1,?2,?831],?['a',?'b',?'c']]
print(second_list)??#?[[1,?2,?831],?['a',?'b',?'c']]

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

代码语言:javascript
复制
import?copy

first_list?=?[[1,?2,?3],?['a',?'b',?'c']]

second_list?=?copy.deepcopy(first_list)

first_list[0][2]?=?831

print(first_list)??#?[[1,?2,?831],?['a',?'b',?'c']]
print(second_list)??#?[[1,?2,?3],?['a',?'b',?'c']]

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

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

代码语言:javascript
复制
my_dictonary?=?{"name":?"Name",?"surname":?"Surname"}
print(my_dictonary["age"])??

错误如下。

代码语言:javascript
复制
KeyError:?'age'

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

代码语言:javascript
复制
from?collections?import?defaultdict

my_dictonary?=?defaultdict(str)
my_dictonary['name']?=?"Name"
my_dictonary['surname']?=?"Surname"

print(my_dictonary["age"])??

▍95、构建迭代器

代码语言:javascript
复制
class?OddNumbers:
????def?__iter__(self):
????????self.a?=?1
????????return?self

????def?__next__(self):
????????x?=?self.a
????????self.a?+=?2
????????return?x


odd_numbers_object?=?OddNumbers()
iterator?=?iter(odd_numbers_object)

print(next(iterator))??#?1
print(next(iterator))??#?3
print(next(iterator))??#?5

▍96、删除列表的重复项

代码语言:javascript
复制
my_set?=?set([1,?2,?1,?2,?3,?4,?5])
print(list(my_set))??#?[1,?2,?3,?4,?5]

▍97、打印模块的安装位置

代码语言:javascript
复制
import?pandas

print(pandas)??#?<module?'torch'?from?'/Users/...'

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

代码语言:javascript
复制
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()的区别

sort():对原始列表进行排序

sorted():返回一个新的排序列表

代码语言:javascript
复制
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代表唯一标识符。

代码语言:javascript
复制
import?uuid

#?根据主机ID、序列号和当前时间生成UUID
print(uuid.uuid1())??#?308490b6-afe4-11eb-95f7-0c4de9a0c5af

#?生成一个随机UUID
print(uuid.uuid4())??#?93bc700b-253e-4081-a358-24b60591076a
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-23,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com