个Python进阶技巧
本来是在查资料,无意间看到了这个知乎文章,感觉内容值得学习,但是排版实在难受,代码和注释混在一起,没有换行,同时解释也很奇怪(感觉是机翻的),当我无法忍受想关闭网页的时候,发现这篇文章是翻译自Medium的文章,但是原文章是英语写的,为了帮到那些英语不太好的Python学习者,同时方便自己之后看,于是写了这篇博文(算是笔记吧)
基于Medium的文章 《20 Python Snippets You Should Learn Today》 ,除了翻译外添加了自己的解释。水平有限,如果有错误欢迎读者指正。
大部分示例代码均引用自 Medium 《20 Python Snippets You Should Learn Today》
1 反转字符串
下面的代码使用Python切片操作来反转字符串。
# Reversing a string using slicing
my_string = "ABCDE"
reversed_string = my_string[::-1]
print(reversed_string)
# Output
# EDCBA
这里用到的是Python切片
切片某种意义上就是对如下代码的书写进行了简化(不考虑Python中-1的情况)
// [a:b:c]
for (int i = a, i < b; i = i + c) {
// do something
}
推荐阅读: 《How to reverse a string in Python?》
2 转化为标题(首字母大写)
下面的代码把字符串转化为标题格式。这里用了字符串类的title()方法来实现。
my_string = "my name is chaitanya baweja"
# using the title() function of string class
new_string = my_string.title()
print(new_string)
# Output
# My Name Is Chaitanya Baweja
把字符串中单词的首字母都大写,转变为标题格式,就是调用了字符串类的title()方法,很简单,不需要解释。
值得一提的是,虽然叫 title, 但是它是完全不加判断地把所有单词的首字母大写,并没有遵循英语的语法规则。
英文标题首字母大写规则
按照规则的优先级从高到底应该是:
标题的第一个单词的首字母要大写;
冠词都不需要大写;
字母个数多于3个(不含3个)的介词、连词的首字母要大写;
名词、动词、形容词、副词、代词、感叹词首字母应大写;
大写所有英语中要求大写的单词。如月份、人名、地名等等。
根据优先级递减的规则,如果后面的规则与前面的规则冲突,则优先执行前面的规则。
来源: https://www.cnblogs.com/crackpotisback/p/5547249.html
test_str = "the story of an magical apple and me"
title_str = test_str.title()
print(title_str)
# Output
# The Story Of An Magical Apple And Me
另外,函数只识别空格分割的单词
my_string = "helloworld"
new_string = my_string.title()
print(new_string)
# Output
# Helloworld
3 查找字符串的唯一元素
下面的代码可以用于查找字符串中所有的唯一元素,我们利用了集合内元素的唯一性。
my_string = "aavvccccddddeee"
# converting the string to a set
temp_set = set(my_string)
# stitching set into a string using join
new_string = ''.join(temp_set)
print(new_string)
# Output
# ecdva
效果是把字符串中用到的字符都提取出来,构成一个新的字符串。
比如对 hello ,它内部包含 h, e, l, o 这几四字符,于是我们就会得到一个由这四个字符构成的新字符串,顺序通常是乱的,比如 oelh 就是一种可能的结果。
输出结果并没有排序,是随机的,比如你期望如下代码返回abcdefghijklmnopqrstuvwxyz .,但是结果却是杂乱的。
my_string = "the quick brown fox jumps over the lazy dog."
temp_set = set(my_string)
new_string = ''.join(temp_set)
print(new_string)
# Output
# trzixup.efbajovcdnslywhg qmk
这里用到了python中的 集合 和 join()方法
首先利用集合的唯一性,用原始字符串构造一个集合,然后利用join()方法把集合内的元素用空字符串进行连接,相当于将集合内的元素连接成字符串。
推荐阅读: 《An Introduction to Python Sets - Part I》
4 输出 n次字符串或列表
你可以对字符串或列表使用乘法(*)。这让我们可以按照我们的需求输出多次。
n = 3 # number of repetitions
my_string = "abcd"
my_list = [1,2,3]
print(my_string*n)
# abcdabcdabcd
print(my_list*n)
# [1,2,3,1,2,3,1,2,3]
关于这个内容的一个有趣的用例是定义一个具有恒定值的列表——假设为零。
n = 4
my_list = [0]*n # n denotes the length of the required list
# [0, 0, 0, 0]
乘法的特殊用法,没什么需要解释的。
5 列表解析
列表解析为创建列表提供了一种可以以其他列表为基础来创建新的列表的优雅方式。
下面的代码通过把旧列表中的每个元素都乘以2来创建新列表。
# Multiplying each element in a list by 2
original_list = [1,2,3,4]
new_list = [2*x for x in original_list]
print(new_list)
# [2,4,6,8]
推荐阅读: 《List Comprehensions in Python》
6 交换俩个变量的值
Python使得交换俩个变量的值变得十分简单,并不需要使用另一个变量。
a = 1
b = 2
a, b = b, a
print(a) # 2
print(b) # 1
很简单,不需要解释。
7 把字符串分解为子字符串列表
我们可以通过字符串类的 split() 方法来把字符串分解成子字符串列表。你同样可以传递一个参数来决定用什么字符进行分割。
string_1 = "My name is Chaitanya Baweja"
string_2 = "sample/ string 2"
# default separator ' '
print(string_1.split())
# ['My', 'name', 'is', 'Chaitanya', 'Baweja']
# defining separator as '/'
print(string_2.split('/'))
# ['sample', ' string 2']
这里使用了 split()方法 不多解释了。
8 将字符串列表组合成单字符串
join()方法可以通过传入的参数作为间隔把字符串数组组合成单字符串。
在本例中。我们使用逗号作为分割符。
list_of_strings = ['My', 'name', 'is', 'Chaitanya', 'Baweja']
# Using join with the comma separator
print(','.join(list_of_strings))
# Output
# My,name,is,Chaitanya,Baweja
使用了 join()方法 ,不多解释了。
9 检查给定字符串是否为回文(Palindrome)
我们已经讨论了如何反转字符串,因此,在Python中,回文检查变得很简单。
my_string = "abcba"
if my_string == my_string[::-1]:
print("palindrome")
else:
print("not palindrome")
# Output
# palindrome
10 列表中元素出现的次数
有很多的方法来做这件事,但是我最喜欢的方法是使用Python中的 Counter 类。
Python的 Counter 会记录容器内每个元素的出现次数。Counter() 返回一个字典,字典内以元素为键,出现次数为值。
同样的,我们可以使用函数 most_common() 来获得列表中出现次数最多的元素。
# finding frequency of each element in a list
from collections import Counter
my_list = ['a','a','b','b','b','c','d','d','d','d','d']
count = Counter(my_list) # defining a counter object
print(count) # Of all elements
# Counter({'d': 5, 'b': 3, 'a': 2, 'c': 1})
print(count['b']) # of individual element
# 3
print(count.most_common(1)) # most frequent element
# [('d', 5)]
使用列表作为参数构建Counter类,返回值即为所需内容。
————————————————
版权声明:本文为CSDN博主「AimerNeige」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AimerNeige/article/details/105495877