python进阶从青铜到王者一定会用上的Python技巧

目录
  • 1.如何判断一个列表中的数值是否全部小于某个数
  • 2.如何对列表中的字符串按照特定要求进行排序
  • 3.如何实现按照键或者数值对字典进行排序
  • 4.怎么将列表中的数字转换成字符串
  • 5.如何判断列表中的元素是否都属于一个类型
  • 6.列表怎么反转呢
  • 7.如何从可迭代对象中随机选择一个元素
  • 9.筛选出以元音字母开头的字符串
  • 10.创建一个计数字典的方法

每个案例都有两种解决方法,第一种方法相对小白,第二种方法则是属于有经验的高手写法。

下面有请青铜和王者两位选手进场。各位同学请对号入座~

1.如何判断一个列表中的数值是否全部小于某个数

# 1.判断一个列表中的数值是否全部小于某个数
num = 10
list1 = [1, 1, 5, 5, 7, 1]
# 青铜选手
index = 0
for n in list1:
    if n < num :
        index += 1
        continue
    else:
        print("青铜选手", False)
        break
if index == len(list1):
    print("青铜选手", True)
# 王者选手
print("王者选手", all(map(lambda x: x < num, list1)))

青铜选手:最直观的方法,一个个遍历去判断列表中的元素是不是小于某个数值,太简单啦。

王者选手 :利用两个Python内置函数+Python匿名函数,一行代码即可轻松的解决。so easy~

2.如何对列表中的字符串按照特定要求进行排序

# 2.对列表中的字符串按照特定要求进行排序
list2 = ["low", "irving", "james", "durant"]

def first_c(str1):
    return ord(str1[0])

# 青铜选手 冒泡排序
for i in range(len(list2)):
    for j in range(len(list2) - i - 1):
        if len(list2[j]) > len(list2[j+1]):
            list2[j], list2[j+1] = list2[j+1], list2[j]
print("青铜选手:", list2)

# 王者选手
print("王者选手:", sorted(list2, key=len))
print("按首字母排序:", sorted(list2, key=first_c))

青铜选手:列表中的字符串排序算法就可以搞定啦,例如最经典的冒泡排序,肿么样?

王者选手:利用内置函数sorted一行代码就解决。不仅如此,对于排序的关键词指定方面,我还能自己设置排序的函数,例如上面的firstC函数,按照字符串的首字母进行排序。羡慕不?

3.如何实现按照键或者数值对字典进行排序

# 3.按照键或者数值对字典进行排序
dict3 = {"low" : 3, "irving": 6, "james": 1, "durant": 4}
# 青铜选手
list3 = sorted(dict3.items(), key=lambda x: x[0])
dict3_keys = {i:j for i, j in list3}
print("青铜选手 按键排序:", dict3_keys)
list3 = sorted(dict3.items(), key=lambda x: x[1])
dict3_values = {i:j for i, j in list3}
print("青铜选手按值排序:", dict3_values)
#王者选手
dict3_keys = {key: dict3[key] for key in sorted(dict3)}
print("王者选手按键排序:", dict3_keys)
dict3_values = {key: dict3[key] for key in sorted(dict3, key=dict3.get)}
print("王者选手按值排序:", dict3_values)

青铜选手:这次我用了sorted内置函数进行排序后,再转换成字典形式。两行代码搞定!

王者选手:青铜选手你的方法在转换的过程中会造成空间资源浪费。我直接利用了对于键或者值进行排序,再利用排序后的键或者是值来构造最终的字典,且程序简洁。

4.怎么将列表中的数字转换成字符串

# 4.将列表中的数字转换成字符串
list4 = [1, 3, 5, 7, 12, 6]
#青铜选手 直接转换
list_str4 = [str(i) for i in list4]
print("青铜选手:", list_str4)
#王者选手 利用map函数
list_str4 = list(map(str, list4))
print("王者选手:", list_str4)

青铜选手:我用的是列表解析方案,通过循环迭代的方式产生新的列表。这次够简洁,也不浪费空间了吧~~

王者选手:我利用了map内置函数,将列表中的数字转换为字符串。这次咱们算打平吧!

5.如何判断列表中的元素是否都属于一个类型

# 5.判断列表中的元素是否都属于一个类型
list5 = ['1', '3', '5', '7', '12', '6']
# 青铜选手 逐一判断每个元素
index = 0
for element in list5:
    if not isinstance(element, str):
        print("青铜选手:", False)
        break
    index += 1
if index == len(list5):
    print("青铜选手:", True)
# 王者选手
def checkStr(x):
    if isinstance(x, str):
        return True
    else:
        return False
print("王者选手:", all(list(map(checkStr, list5))))

青铜选手:这次我用的方法是逐个的判断列表中的每一个元素,如果有任一个元素不是字符串,则输出False。当全部循环结束后,如果index数值等于列表总长度,则输出True。

王者选手:利用map函数来判断列表中的每个元素是否满足函数checkStr。利用all函数来得到最终的结果。这不是更简单?

6.列表怎么反转呢

# 6.反转列表
list6 = ['1', '3', '5', '7', '12', '6']
# 青铜选手
new_list6 = []
for i in range(len(list6)-1, -1, -1):
    new_list6.append(list6[i])
print("青铜选手:", new_list6)
# 王者选手
print("王者选手:", list6[::-1])
list6.reverse()
print("王者选手:", list6)

青铜选手:创建一个新的列表对象,并将list6中的元素按照从后向前的方式添加到新列表中。

王者选手:我有两种方式喔,第一种方式是利用列表切片的方法,获取反转的列表。第二种方式是利用列表的reverse函数,但是reverse函数只能在原列表中进行修改,不能创建一个新的列表。Yeah~~

7.如何从可迭代对象中随机选择一个元素

# 7.从可迭代对象中随机选择一个元素
import random
random.seed(0)
list7 = ['6', '12', '7', '5', '3', '1']
tuple7 = ("low", "irving", "james", "durant")
print(random.choice(list7))
print(random.choices(tuple7, k=3))
print(random.sample(list7, k=2))

青铜选手:我不会,交白卷了只能。。。

王者选手:小青同学,搬好凳子认真听讲吧!在Python中进行随机数值的选择,可以利用Python的内置库random,上面函数中,choice函数是从列表中随机选择一个数值,choices函数又放回的选择k个数值,sample则是无放回的选择k个数值。一共三张姿势喔,学会了吗?

8.怎么利用列表创建字典

# 8.利用列表创建字典
list8_1 = ["low", "irving", "james", "durant"]
list8_2 = [3, 6, 7, 2]
list8_3 = [5, 8, 1, 3]
#青铜选手
dict8 = {}
for i in range(len(list8_1)):
    dict8[list8_1[i]] = list8_2[i]
print("青铜选手:", dict8)
#王者选手
dict8 = dict(zip(list8_1, list8_2))
dict8_2 = dict(zip(list8_1, zip(list8_2, list8_3)))
print("王者选手:", dict8)
print("王者选手:", dict8_2)

青铜选手:用列表创建字典,再利用for循环的方式,在字典中创建键值对的item。这次我会!

王者选手:利用zip内置函数,创建一个zip对象,并利用dict函数将zip对象转化为字典,一行代码搞定。完胜!

9.筛选出以元音字母开头的字符串

# 9.筛选出以元音字母开头的字符串

list9 = ["low", "irving", "james", "durant", "allen"]

#青铜选手
new_list9 = []
for name in list9:
    if name[0].lower() in "aeiou":
        new_list9.append(name)
print("青铜选手:", new_list9)

print("王者选手:", list(filter(lambda x: x.lower().startswith(('a', 'e', 'i', 'o', 'u')), list9)))
print("王者选手:", [name for name in list9 if name[0] in 'aeiouAEIOU'])

青铜选手:对于list9中的每个字符串元素进行判断处理,如果字符串的第一个字母是原因字母,则将该字符串添加到新的列表new_list9中。

王者选手:直接利用列表解析或者是通过filter函数来过滤list9中满足匿名函数的元素,相比于map函数,filter函数能够直接过滤出来满足条件的元素值。这不是更简单嘛~~

10.创建一个计数字典的方法

# 10.创建一个计数字典
from collections import Counter
list10 = ["low", "irving", "james", "durant", "allen",  "irving", "james", "allen", "durant", "durant"]
#青铜选手
dict10 = {name:0 for name in set(list10)}
for name in list10:
    if name in dict10:
        dict10[name] += 1
    else:
        dict10[name] = 1
print("青铜选手:", dict10)
# 王者选手
print("王者选手:", dict(Counter(list10)))

青铜选手:首先创建一个字典,字典的键包含了list10中所有出现过的元素,然后逐一统计列表中元素出现的次数。这不就行了?

王者选手:借用collections库中的Counter类,直接统计list10中元素的个数,然后利用dict函数来讲Counter对象转化为字典对象。

如果本篇博客有任何错误,请批评指教,不胜感激 !

以上就是python进阶从青铜到王者一定会用上的Python技巧的详细内容,更多关于Python进阶技巧的资料请关注我们其它相关文章!

(0)

相关推荐

  • 弄懂这56个Python使用技巧(轻松掌握Python高效开发)

    1. 枚举 - enumerate 可以有参数哦 之前我们这样操作: i = 0for item in iterable: print i, item i += 1 现在我们这样操作: for i, item in enumerate(iterable): print i, item enumerate函数还可以接收第二个参数.就像下面这样: >>> list(enumerate('abc')) [(0, 'a'), (1, 'b'), (2, 'c')] >>> li

  • Python中一些不为人知的基础技巧总结

    前言 本文主要给大家总结介绍了关于Python的一些基础技巧,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1.startswith()和endswith()参数可以是元组 当检测字符串开头或结尾时,如果有多个检测值,可以用元组作为startswith()和endswith()参数: # bad if image.endswith('.jpg') or image.endswith('.png') or image.endswith('.gif'): pass # good

  • 经验丰富程序员才知道的8种高级Python技巧

    本文将介绍8个简洁的Python技巧,若非经验十足的程序员,你肯定有些从未见过.向着更简洁更高效,出发吧! 1.通过多个键值将对象进行排序 假设要对以下字典列表进行排序: people = [ { 'name': 'John', "age": 64 }, { 'name': 'Janet', "age": 34 }, { 'name': 'Ed', "age": 24 }, { 'name': 'Sara', "age": 6

  • 17个Python小技巧分享

    1.交换变量 复制代码 代码如下: x = 6 y = 5 x, y = y, x print x >>> 5 print y >>> 6 2.if 语句在行内 复制代码 代码如下: print "Hello" if True else "World" >>> Hello 3.连接 下面的最后一种方式在绑定两个不同类型的对象时显得很酷. 复制代码 代码如下: nfc = ["Packers",

  • 超级实用的8个Python列表技巧

    列表(List)是你使用Python过程中接触最为频繁的数据结构,也是功能最为强大的几种数据结构之一.Python列表非常的万能且蕴含着许多隐藏技巧,下面我们就来探索一些常用的列表技巧. 一.列表元素的过滤 1. filter()的使用 filter()函数接受2个参数:1个函数对象以及1个可迭代的对象,接下来我们定义1个函数然后对1个列表进行过滤. 首先我们创建1个列表,并且剔除掉小于等于3的元素: 回顾一下发生了什么: 我们定义了列表original_list接着我们定义了一个接受数值型参数

  • 10个Python小技巧你值得拥有

    列表推导式 你有一个list: bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子: [2, 4, 6, 8, 10] 大多初学者,根据之前语言的经验会大概这样来做 bag = [1, 2, 3, 4, 5] for i in range(len(bag)): bag[i] = bag[i] * 2 但是有更好的方法: bag = [elem * 2 for elem in bag] 很简洁对不对?这叫做Python的列表推导式 . 遍历列表 还是上面的列表

  • python进阶从青铜到王者一定会用上的Python技巧

    目录 1.如何判断一个列表中的数值是否全部小于某个数 2.如何对列表中的字符串按照特定要求进行排序 3.如何实现按照键或者数值对字典进行排序 4.怎么将列表中的数字转换成字符串 5.如何判断列表中的元素是否都属于一个类型 6.列表怎么反转呢 7.如何从可迭代对象中随机选择一个元素 9.筛选出以元音字母开头的字符串 10.创建一个计数字典的方法 每个案例都有两种解决方法,第一种方法相对小白,第二种方法则是属于有经验的高手写法. 下面有请青铜和王者两位选手进场.各位同学请对号入座~ 1.如何判断一个

  • Python进阶_关于命名空间与作用域(详解)

    写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字.对象及其绑定的文章. 1. 命名空间 1.1 什么是命名空间 Namespace命名空间,也称名字空间,是从名字到对象的映射.Python中,大部分的命名空间都是由字典来实现的,但是本文的不会涉及命名空间的实现.命名空间的一大作用是避免名字冲突: def fun1(): i = 1 def fun2(): i = 2 同一个模块中的两个函数中,两个同名名字i之间绝没有任何

  • python进阶_浅谈面向对象进阶

    学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) print(isinstance(s,Son)) print(isinstance(s,Foo)) #type更精准 print(type(s) is Son) print(type(s) is Fo

  • 老生常谈Python进阶之装饰器

    函数也是对象 要理解Python装饰器,首先要明白在Python中,函数也是一种对象,因此可以把定义函数时的函数名看作是函数对象的一个引用.既然是引用,因此可以将函数赋值给一个变量,也可以把函数作为一个参数传递或返回.同时,函数体中也可以再定义函数. 装饰器本质 可以通过编写一个纯函数的例子来还原装饰器所要做的事. def decorator(func): def wrap(): print("Doing someting before executing func()") func(

  • python进阶教程之词典、字典、dict

    基础教程介绍了基本概念,特别是对象和类. 进阶教程对基础教程的进一步拓展,说明Python的细节.希望在进阶教程之后,你对Python有一个更全面的认识. 之前我们说了,列表是Python里的一个类.一个特定的表,比如说nl = [1,3,8],就是这个类的一个对象.我们可以调用这个对象的一些方法,比如 nl.append(15). 我们要介绍一个新的类,词典 (dictionary).与列表相似,词典也可以储存多个元素.这种储存多个元素的对象称为容器(container). 基本概念 常见的创

  • Python进阶-函数默认参数(详解)

    一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 while n > 0: r *= x n -= 1 return r 这样在调用pow函数时,就可以省略最后一个参数不写: print(pow(5)) # output: 25 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: 设置何种参数为默认参数?一般来说,将参数值变化小的设置为默认参数. python标准库实践 python内建函数: prin

  • Python进阶之尾递归的用法实例

    作者是一名沉迷于Python无法自拔的蛇友,为提高水平,把Python的重点和有趣的实例发在简书上. 尾递归 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的.当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归.尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码. (来源于不说人话的某度) 下面是笔者的个人理解:把计算出的值存在函数内部(当然不止尾递归)

  • Python进阶之使用selenium爬取淘宝商品信息功能示例

    本文实例讲述了Python进阶之使用selenium爬取淘宝商品信息功能.分享给大家供大家参考,具体如下: # encoding=utf-8 __author__ = 'Jonny' __location__ = '西安' __date__ = '2018-05-14' ''' 需要的基本开发库文件: requests,pymongo,pyquery,selenium 开发流程: 搜索关键字:利用selenium驱动浏览器搜索关键字,得到查询后的商品列表 分析页码并翻页:得到商品页码数,模拟翻页

  • Python进阶之自定义对象实现切片功能

    切片是 Python 中最迷人最强大最 Amazing 的语言特性(几乎没有之一),在<Python进阶:切片的误区与高级用法>中,我介绍了切片的基础用法.高级用法以及一些使用误区.这些内容都是基于原生的序列类型(如字符串.列表.元组......),那么,我们是否可以定义自己的序列类型并让它支持切片语法呢?更进一步,我们是否可以自定义其它对象(如字典)并让它支持切片呢? 1.魔术方法:__getitem__() 想要使自定义对象支持切片语法并不难,只需要在定义类的时候给它实现魔术方法 __ge

  • python进阶之多线程对同一个全局变量的处理方法

    通常情况下: from threading import Thread global_num = 0 def func1(): global global_num for i in range(1000000): global_num += 1 print('---------func1:global_num=%s--------'%global_num) def func2(): global global_num for i in range(1000000): global_num +=

随机推荐