python04- for in 、while in、列表、交叉赋值、元组、字典、集合(set)、公共方法、列表推导式、集合推导式、字典推导式

1、for in 、while in 循环区别

#   for i in range (开始/左边界, 结束/右边界, 步长)  i 是循环点,in 后是循环体

# for i in range(开始/左边界, 结束/右边界, 步长):
for i in range(1, 10, 2):   # 等价于 for (i=1;i<=10;i+=2)
    print(i)

#   for i in a     一般为非数值,每次步长只能为1, i 是循环点,in 后是循环体

# 一般为非数值,每次步长只能为1
a = 'abcdef'
for i in a:
    print(i)

# 非数值,每次步长只能为1
a = ['你好','世界']
for i in a:
    print(i)

总结:for i in a  模式,是将in后面a作为一个循环体,通过i,默认每次+1,做a的循环遍历。每执行一次遍历,for 会重新连接 in 后的 a 的 id 索引,获取数值。

while i  in  a 代表的是,判断 i 在不在 a中,假如 i =1 ,a = 42351,while会在每次执行循环的时候,将整个a进行顺序检索,看是不是有 i = 1,只有遇到,执行循环。而 for 循环,是每次按照顺序将in 后 面的数据中获取数据并使用。

2、列表删除:pop  remove  clear

变量表示是一个容器,列表可以表示是一组容器

空列表 list = [ ]  
类型是list
有内容得到列表 list = ['A','B','C']
列表中可以嵌套列表 list = [ [ ],[ ],[ ] ] ,有什么作用,比如去超市分类,有水果类、日杂类、零食类,其中水果类还有苹果、香蕉等,日杂类有锅、铲子等等。所以里面可以存储,int float char 包括 list

空列表 list = [ ]  

有内容得到列表 list = ['A','B','C']

list2 = ['牛奶', '面包','辣条']
print(type(list))

获取列表中的元素,通过索引

list2 = ['牛奶', '面包', '辣条']
print(list2[1])    # 面包

 索引也有正序、倒叙

list2 = ['牛奶', '面包', '辣条']
print(list2[1])  # 面包
print(list2[-1]) # 辣条

由于列表也有索引、正序、倒叙,所以就能使用切片机制

如果是字符串,切片切完之后,是字符串
如果是列表,切片切完之后,是列表

list = ['a', 'b', 'c']
list2 = 'abc'
print(list[1])   # b
print(list[-1])  # c
print(list[:-1])
print(list2[:-1]) # start是空,所以是非负数(代表从左到右),因为是空,代表0,并且从index0开始,到倒数-1条,不包含-1,所以是['a', 'b']

列表删除:pop

pop  :指定删除那个索引的数值

list = ['牛奶', '面包', '辣条']
list.pop(-1)
print(list)  #  删除了index(-1)='辣条',所以是['牛奶', '面包']

如果索引数值大于当前的索引范围,则报错,超出索引范围

pop() 不添加任何,表示从后往前依次删除一位

list = ['牛奶', '面包', '辣条']
list.pop()
print(list)
list.pop()
print(list)

列表删除: remove()  你想删除列表中的一个数值,不是下标索引。默认只删除匹配到第一个。如果要都删除,就需要循环

list = ['牛奶', '面包', '辣条', '面包']
list.remove('面包')
print(list)

如果删除一个不存在的数值,提示x not in list,代表你给定的数值不在列表中

如何确定,在删除之前有没有这个元素,有删除,没有不删除。
in 表示元素是不是在列表中,返回布尔,所以可以使用 if 语句

list = ['牛奶', '面包', '辣条', '面包']
a = input("输入想要删除的参数:")
if a in list:
    list.remove('面包')
    print(list)
else:
    print("%s 不存在" % a)

删除所有的指定的元素

错误用法:

list = ['牛奶', '面包', '面包', '面包', '辣条', '面包']
a = input("输入想要删除的参数:")
for a in list:
    if a == '面包':
        list.remove(a)
print(list)

为什么?

1、for a in list   #   a = list[0] = '牛奶'
2、if a == '面包': list.remove(a)   #  判 断 '牛奶'  不等于 ’面包‘,False

3、for a in list     # a = list[1] = '面包'
4、if a == '面包': list.remove(a)   # 判 断 '面包'  不等于 ’面包‘,True , 移除列表中第一个'面包'  ,此时 list =  ['牛奶', '面包', '面包', '辣条', '面包']。注意:索引位置已经发生改变

5、for a in list     #  这时候按照默认for 开始获取list[2]的数据,a = list[2] = '面包' , 但是list已经发生改变,list =  ['牛奶', '面包', '面包', '辣条', '面包'],现在取list[2] = '面包' ,就会将list[1] = '面包' 给略过

正确用法:while len

list = ['牛奶', '面包', '面包', '面包', '辣条', '面包']
a = input("输入想要删除的参数:")
n = 0
while n < len(list):
    if list[n] == '面包':
        list.remove('面包')
    else:
        n += 1
print(list)

解释:

1、while n < len(list):   # n < 6
2、if list[n] == '面包':  list.remove('面包')   # if list[0] == '面包':  list.remove('面包')   不成立
3、esle n=n+1   # 所以 n 等 1
4、while n < len(list):  # 1 < 6
5、if list[n] == '面包':  list.remove('面包')   # if list[1] == '面包':  list.remove('面包')   成立,此时list = ['牛奶', '面包', '面包', '辣条', '面包']  ,也就是移除一个元素,在移除元素的后面所有元素,索引都往前移动了一位
6、不触发 n=n+1,所以n 还是等于 1
7、while n < len(list):   # 1 < 6   上文可知,索引向前移动一位,所以我还校验上次的索引,不就是校验下一个元素了么

正确用法:while in

list = ['牛奶', '面包', '面包', '面包', '辣条', '面包']
a = '面包'
while a in list:
    list.remove(a)
print(list)

解释:

# while a in list 意思是,通过while函数,内部循环遍历list中有没有‘面包'

# while a in list:  # list = ['牛奶', '面包', '面包', '面包', '辣条', '面包'] 列表中有‘面包'
# list.remove(a)  移除列表(list = ['牛奶', '面包', '面包', '面包', '辣条', '面包'])第一个‘面包',结果是list = ['牛奶', '面包', '面包', '辣条', '面包']

# while a in list:  # list = ['牛奶', '面包', '面包', '辣条', '面包'] 列表中有‘面包'
# list.remove(a)  移除列表(list = ['牛奶', '面包', '面包', '辣条', '面包'])第一个‘面包',结果是list = ['牛奶', '面包', '辣条', '面包']

# while a in list:  # list = ['牛奶', '面包', '辣条', '面包'] 列表中有‘面包'
# list.remove(a)  移除列表(list = ['牛奶', '面包', '辣条', '面包'])第一个‘面包',结果是list = ['牛奶','辣条', '面包']

# while a in list:  # list = ['牛奶','辣条', '面包'] 列表中有‘面包'
# list.remove(a)  移除列表(list = ['牛奶','辣条', '面包'])第一个‘面包',结果是list = ['牛奶','辣条']

正确用法:for 满足添加新数组

list = ['牛奶', '面包', '面包', '面包', '辣条', '面包']
a = input("输入想要删除的参数:")
list1 = []
for n in list:
    if n != a:
        list1.append(n)   # 直接将不符合的,传递到一个新的列表
list = list1
print(list)

正确用法:for 倒序

list = ['牛奶', '面包', '面包', '面包', '辣条', '面包']
b = '面包'
for a in list[::-1]:
    if a == b:
        list.remove(a)
print(list)

# a = list[5] = '面包'
# if a == b:  list.remove(a)  # '面包'='面包'  移除第一个面包,list = ['牛奶', '面包', '面包', '辣条', '面包']

# a = list[4] = '辣条' 不做处理

# a = list[3] = '面包' 
# if a == b:  list.remove(a)  # '面包'='面包'  移除上次的列中的第一个面包,list = ['牛奶', '面包', '辣条', '面包']

# a = list[2] = '面包' 
# if a == b:  list.remove(a)  # '面包'='面包'  移除上次的列中的第一个面包,list = ['牛奶', '辣条', '面包']

# a = list[1] = '面包' 
# if a == b:  list.remove(a)  # '面包'='面包'  移除上次的列中的第一个面包,list = ['牛奶', '辣条']

列表删除:clear

表示清除列表中所有的数据

3、for in 后的循环体

案例:如下两个案例中,在 for 后,一个是进行list = ['你好', '环境'],一个是list.remove(a)。都是进行了对 list 改变,为什么第一个案例中,for i in list 中的 list 还是 list = ['1', '2', '3', '4', '5', '6']。而第二个案例中,for a in list 中的 list 是获取的 list.remove(a) 后的列表

list = ['1', '2', '3', '4', '5', '6']
a = 0
while True:
    if a == 10:
        break
    else:
        for i in list:
            print(i)
            list = ['你好', '环境']
            a += 1

list = ['牛奶', '面包', '面包', '面包', '辣条', '面包']

a = '面包'
for a in list:
    if a == '面包':
        list.remove(a)
print(list)

解释:

首先我们都知道,a = 123, 其中123 (value)、123(id)、123(type)  都是在堆中,而变量a在栈中。通过a = 123,将123(id)跟 a 绑定。而我们还知道,堆中相同类型的数值只有一个,比如变量 a 要跟堆中的'123' 绑定。b 也要跟堆中的'123'绑定。堆中不会在开辟一莫一样的数据,而是复用一个。a = '123' ,a 跟 ‘123’的 id 数值 2188128759792绑定, 这时候 a = '456' ,并不是将2188128759792这个 id 中的这个value = ‘123’ 修改。而是堆中,在开辟一个'456',绑定 a

但是如果是列表,会重新开辟

通过上述讲解- for i in list   ,其中 list 是不会跟着变得,in 后接的是第一次循环的id数值,即使你 list 变量跟另一个id绑定,不影响我 in 后面找之前的 id 中的数值。

list = ['1', '2', '3', '4']
print(id(list))
a = 0
while True:
    if a == 6:
        break
    else:
        for i in list:
            print(i)
            list = ['你好', '环境']
            print(id(list))
            print(list)
            a += 1

 如果单纯的执行remove() ,会发现其实没有改变原list指向的 id,而且value发生了改变

如果remove()重新复制,就会将 id 改变

4.  列表元素插入

append()  # 在最后的位置上追加

insert (位置,元素)  # 元素占了位置,其他元素只能像后移动

list = [0, 1, 2, 3, 4]
list.insert(1, 5)    # 在index(1)下插入5,其他元素index 位置自动往后移动一位
print(list)

extend # 合并两个列表 

5.  列表元素的修改

直接通过 lisrt[index] = 

index(元素)  # 检索列表中,符合要求的第一个元素,并返回索引位置。
在使用 lisrt[index] = 

6.  列表元素的查找

1、元素 in 列表  #  返回 bool 类型
      元素 not in 列表  #  返回 bool 类型

2、列表.index(元素)  #  返回列表中符合要求的第一个元素下标位置,如果没有此元素则报错

3、列表.conut ()  # 查看符合的元素出现的次数之和,如果没有此元素则返回0,故返回整数

7、删除列表元素

删除一个元素:

del list[index]   #  删除指定下标的元素,跟 list.pop(index) 是一个性质

删除列表所有元素:

del   删除列表 相关的所有,包括列表本身

0

clear  只清除列表中的元素,保留列表本身

 8、列表在内存中的调用

list2 = list   # 表示将list连接的堆中的id数值给了list2

del 删除后,删除的是栈中的变量list2,并不是堆的id

9、列表排序

sort()  # 将 list 按特定顺序重新排序,默认为由小到大(reverse=False)升序,参数 reverse=True 可改为由大到小。不能print(mumber.sort) 返回None ,因为sort 是直接改变的列表的本身

reverse # 对列表原有的数据进行反转

10、交叉赋值

a, b, c = b, a, b  # a = b   b = a   c = b

11、元组

元组与列表的区别类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号,元组的格式要求,如果是无任何数据,则 t1 = () 

t1 = ()
print(type(t1))  # <class 'tuple'>

如果有一个数据,则必须有逗号,t1 = ('aa',)  ,否则元组是字符串

t1 = ('aa',)
print(type(t1))  # <class 'tuple'>
t1 = ('aa')
print(type(t1))  # <class 'str'>

元组不能修改,但是可以使用下标跟切片,如下使用 t [index]显示下标,但注意不能越界,包括字符串、列表

元组不能修改,但是可以使用切片,如下,切的是元组,返回的是元组。切的是列表,返回的是列表。字符串切的是字符串

元组计数count

元组元素的查找index() ,如果找不到报错

元组转列表  list( 元组 )

 列表转元组  tuple( 列表 )

12、字典

结构: {键1:值 , 键2:值, 键3:值.......}
字典: {}


元素: 键值对     注意:键是唯一的,值是允许重复的
没有 下标 或者 切片  

1、添加元素

字典名 [key] = value

注意:key 是唯一的,所以在添加的时候如果出现同名的key,后面的key对应的value则替换原来的

 

2、修改元素

字典名 [key] = value   #  不存在 key、value 添加,存在的 key、value 修改

注意:字典中的key是不能更改的,只有value能改。如果要修改key,可以将其删除添加

 3、案例,已知书名、价格、作者,在过年的时候进行价格8折

book = {}
book['书名'] = "<<三国演义>>"
book['价格'] = 23
book['作者'] = '罗贯中'
print(book)
book['价格'] *= 0.8 # book['价格'] = book['价格']*0.8
book['价格']= round(book['价格'], 2)
print(book)

4、清除字典所有元素

.clear()

5、删除单个元素

.pop('key')   , 返回值是删除的 value

 如果字典没有对应的key,报错 

.popitem() 删除最后一个key = value, , 返回值是一个原则,最后一个key = value

del book['书名']  # 类似pop 一样, 如果字典没有对应的key,报错

6、删除整个字典结构

 7、表达有两本书,两本书分别介绍,'书名' 价格'  '作者' , 删除每本书中的作者 books = [ { } ,{ } ]

books = []
book1 = {'书名': "<<三国演义>>", '价格': 23, '作者': '罗贯中'}
books.append(book1)
book2 = {'书名': "<<水浒传>>", '价格': 21, '作者': '作者1'}
books.append(book2)
book3 = {'书名': "<<红楼梦>>", '价格': 22, '作者': '作者2'}
books.append(book3)
print(books)
for i in range(3):
    if '作者' in books[i]:
        books[i].pop('作者')
print(books)

或者

books = [
        {'书名': "<<三国演义>>", '价格': 23, '作者': '罗贯中'},
        {'书名': "<<水浒传>>", '价格': 21, '作者': '作者1'},
        {'书名': "<<红楼梦>>", '价格': 22, '作者': '作者2'}
]
print(books)
for book in books:
        book.pop('作者')
print(books)

8、查询

# 根据key获取value  

value = books.get('书名')   或者  books['书名']

有什么区别?在于key中在字典中如果不存在,books['nihao'] 形式会报错 KeyError: 'nihao'。而books.get('nihao')  则不会报错 ,提示 None。

并且可以修改默认数值None,比如设置找不到的key返回‘不存在key’

#  len 返回的有即对key、value

value = len(books)

9、遍历

# 使用 for in 循环遍历字典,取出的是 key 数值

books = {'书名': "<<三国演义>>", '价格': 23, '作者': '罗贯中'}
for i in books:
    print(i)
    print(books.get(i))  # 或者 print(books[i])

# 取出 value 数值,放入一个列表中 

print(books.values())

返回的是 dict_values(['<<三国演义>>', 23, '罗贯中']) ,这种类型的列表,如果不想用dict_values( )包裹我们需要的这个列表,可以使用如下,强制转换成列表

print(list(books.values()))

列表可以使用for in 通过 books.value() 取出数值

有 books.value(),就有对应的 books.keys() 拿到所有的 key 键

遍历列表,将每一个 key value  用元组形式显示

books = {'书名': "<<三国演义>>", '价格': 23, '作者': '罗贯中'}
print(books.items()) # dict_items([('书名', '<<三国演义>>'), ('价格', 23), ('作者', '罗贯中')])
for i in books.items():
    print(i)

 建议使用 k ,v 形式获取key 或者 value  或者key, value

books = {'书名': "<<三国演义>>", '价格': 23, '作者': '罗贯中'}
for k, v in books.items():
    print(k)
print("\n")

for k, v in books.items():
    print(v)
print("\n")

for k, v in books.items():
    print(k, v)
print("\n")

setdefault 在最末尾添加,不常用,因为添加直接使用kooks[key]=value 。

books = {'书名': "<<三国演义>>", '价格': 23, '作者': '罗贯中'}
books.setdefault("<<语文>>", '作者1')
books['语文2'] = '作者2'
print(books)

两个区别为,setdefault只能添加,不能修改,输入已经存在的key,也无法修改。kooks[key]=value 如果不存在key 添加,存在修改

10、字典合并

列表使用 + 

list = [1,2,3,4]
list1 = [5,6,3,4]
list2 = list + list1
print(list2)    # [1, 2, 3, 4, 5, 6, 3, 4]

 字典使用 update 

books = {'书名': "<<三国演义>>", '价格': 23, '作者': '罗贯中'}
dict = {'a': 10, 'b': 20}
books.update(dict)
print(books)

 如果被合并的字典中,跟主动合并字典中存在一样的key,则被合并的字典替代

fromkeys() 函数创建一个新的字典,特点是指定value是统一的value,无法单独指定。给定的key, 不给value 数值是 None

 指定key value,每个key都会获取其 value

 给指定key value,每个 key 都会获取其 value

11、字典案例:添加三本书,每次不能添加同名的书名

books = []  # 定义列表,书的框架
while True:
    a = False
    if len(books) == 3:
        break
    name = input("输入书名:")

    for book in books:
        if name in list(book.values())[0]:
            print("书名重复")
            a = True
            continue  # 跳出当前for循环
    if a:
        continue
    else:
        anthor = input("请输入作者:")
        price = float(input("请输入价格:"))
        books.append({
            '姓名': name,
            '作者': anthor,
            '价格': price
        })
print(books)

注意:if  in 字典, 是判断的 key 在不在,并不能检索 value 

 第二种:

books = []  # 定义列表,书的框架
while True:
    if len(books) == 3:
        break
    name = input("输入书名:")

    for book in books:
        if name == book.get('姓名'):
            print("书名重复")
            break
    else:
        anthor = input("请输入作者:")
        price = float(input("请输入价格:"))
        books.append({
            '姓名': name,
            '作者': anthor,
            '价格': price
        })
print(books)
# for book in books:  第一次books是空,for in 会执行一次,取出的 book 空
# if name == book.get('姓名'):  book.get('姓名') 是空,所以不等,直接跳到else
# else 通过 books.append ,向 books 添加一个元素

# for book in books:   第二次,默认 book 取第二次,如果还是空,则直接退出不在for,
但是由于这里的 books 只绑定的堆中的id,而上一步中,在这个id 中添加了元素,所以可以取到第二个数值

13、集合(set)

集合(set)是一个无序的、不重复的序列,可以使用大括号 { } 或者 set () 函数创建集

特点:
集合内的元素可以是无序的,比如插入一个a,不确定在那那个index位置
集合内的元素必须不重复(可以理解取字典中的 key 构成)

如何确定是集合还是字典,都是{ } ,注意字典必须是key:value 需要键值对 ,而集合只有key

字典:

set1 = {}
print(type(set1))  # <class 'dict'>  字典

集合(set)

set1 = {'zhangsna'}
print(type(set1))  # <class 'set'>

1、集合的用处:去除重复元素,注意此时列表已经转成集合{ } ,可通过 list 强转

list1 = [1, 2, 3, 4, 5, 2, 5, 13, 1, 3, 2, 2, 1]
set2 = set(list1)
print(set2)   # {1, 2, 3, 4, 5, 13}
print(list(set2))  # [1, 2, 3, 4, 5, 13]

2、注意:创建一个空集合,必须用  set () 而不是 { } , 因为 { } 是用来创建一个空字典

list = []
print(type(list))  # <class 'list'>

tuple = ()
print(type(list))  # <class 'tuple'>

dict = {}
print(type(list))  # <class 'dict'>

set = set()
print(type(set))  # <class 'set'>

3、{ } 或者 set ()  区别

 set ()   只能添加一个字符串,并且会将其中的元素,按照每个字符为一个元素

set1 = set('1234')
print(set1)  # {'3', '1', '2', '4'}
set1 = set('123.4')   # {'4', '.', '3', '1', '2'}
print(set1)

 set () 只能添加一个字符串

如果是数字或者非字符串就会报错

 { }  能添加任何数据(整型、字符串等等)

 { }  能添加多个元素,用逗号分割,其中不会将数一组数据打散划分为一个一个元素

4、添加元素

append extend 只存在列表中,对应的set中  add update  ,由于没有下标,所以没有insert

add 末尾追加,帮必须先声明空集合,而且一次只能添加一个,如果要使用多元素添加,只能使用 update  合并

set1 = set()
set1.add('nihao')
print(set1) # {'nihao'}
set1.add('shijie ')
print(set1) # {'nihao','shijie'}

 集合(无序),多运行几次发现集合中得到元素位置不定,所以没有下标

set1 = set()
set1.add('nihao')
set1.add('shijie')
set1.add('w')
print(set1)

 

5、update  合并

set1.update(set2)

6、移除

 s.remove()    移除指定的元素,如果不存在,报错

set1 = {123, '你好', 'shi'}
set1.remove('你好')
print(set1)    

set1 = {123, '你好', 'shi'}
set1.remove('你好a')   # 报错
print(set1)

 s.discard() 移除指定的元素,如果不存在,不报错

 del 删除整个 set ,因为没有下标

clear 清空整个 set ,不删除set

pop  随机删除

set1 = {123, '你好', 'shi'}
set1.pop()
print(set1)

7、集合取交集.intersection()   或者  &

set1 = {1, 2, 3, 4, 5, 13}
set2 = {4, 5, 6, 9, 10, 13}
print(set1.intersection(set2))

set1 = {1, 2, 3, 4, 5, 13}
set2 = {4, 5, 6, 9, 10, 13}
print(set1 & set2)  # {13, 4, 5}

8、集合取并集.union()    或者  |

set1 = {1, 2, 3, 4, 5, 13}
set2 = {4, 5, 6, 9, 10, 13}
print(set1.union(set2))

set1 = {1, 2, 3, 4, 5, 13}
set2 = {4, 5, 6, 9, 10, 13}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 9, 10, 13}

9、集合差集.difference()  或者 A - B

set1 = {1, 2, 3, 4, 5, 13}
set2 = {4, 5, 6, 9, 10, 13}
print(set1.difference(set2))   # set1有的元素,set2没有
print(set2.difference(set1))   # set2有的元素,set1没有

print(set1 - set2)   # set1有的元素,set2没有
print(set2 - set1)   # set1有的元素,set2没有

对称差集symmetric_difference()    或者 A ^ B

A.symmetric_difference(B)   # A有的元素,B没有,记录到一个集合中。B有的元素,A没有,追加到集合中

set1 = {1, 2, 3, 4, 5, 13}
set2 = {4, 5, 6, 9, 10, 13}
print(set1.symmetric_difference(set2))   # set1有的元素,set2没有。set2有的元素,set1没有,记录到一个集合中
print(set2.symmetric_difference(set1))
print(set1 ^ set2)   # set1有的元素,set2没有。set2有的元素,set1没有,记录到一个集合中

10、判断子集还是父集

A.issubset(B)      A是B的子集?
A.issuperset(B)   A是B的父集?

set1 = {1, 2, 3, 4, 5, 13}
set2 = {1, 2, 3}
set3 = {1, 2, 3, 10}
print(set1.issubset(set2))   # set1是set2的子集?False
print(set2.issubset(set1))   # set2是set1的子集?True
print(set3.issubset(set1))   # set2是set1的子集?False
set1 = {1, 2, 3, 4, 5, 13}
set2 = {1, 2, 3}
set3 = {1, 2, 3, 10}
print(set1.issuperset(set2))   # set1是set2的父集?True
print(set2.issuperset(set1))   # set2是set1的父集?False
print(set1.issuperset(set3))   # set1是set3的父集?False

14、公共方法

      Python包含以下内置函数

函数描述备注

len(item)

计算容器中元素个数

del(item)

删除变量

del有两种方式

max(item)

返回容器中元素最大值

如果是字典,只针对key比较

min(item)

返回容器中元素最小值

如果是字典,只针对key比较

cmp(item1,item2)

比较两个值,-1小于/0相等/1大于

Python3.X取消了cmp函数

+ - * / % 字符串、列表、元组
in  not in元素是否存在字符串、列表、元组、字典

>  >= ==

< <=

元素比较字符串、列表、元组
min max sum abs 最小值  最大值  求和 绝对值整型
sorted 排序 sorted ( t1 ,reversr=True )降序字符串、列表、元组、字典。默认列表带sort ,而元组等都不带,有了此函数,不用将字典转换成列表
chr转换成字符型整型、浮点型、字符型

15、列表推导式

想要获得一个 [1..20] 的列表

list = []
for i in range(20):
    list.append(i)
print(list)

 python 帮助我们构建了,通过有序创元素构建列表模式

list = [i for i in range(20)]
print(list)

解释:for i in range(20) 还是那个意思,取0~19,取出什么元素呢?取出 [ i for i in range(20)] ,取出   i  ,然后存入列表中

list = [i+2 for i in range(11)]
print(list)

 案例:0~100 的偶数

list = [i for i in range(0, 101, 2)]
print(list)

加 if 判断写法: 格式:[ i for i in 可迭代的  if 条件] 意思式如果满足if 条件,取出  i  然后存入列表中

案例:0~100 的偶数,如何通过加判断

list = [i for i in range(0, 101) if i % 2 == 0]
print(list)

 案例:取出列表中,全部式单词的元素,并放在列表中

list = ['b6', 'hello', '100', 'world']
list2 = [world for world in list if world.isalpha()] # isalpha判断是不是全部是单词,是返回True
print(list2)

加 if else 判断写法: 格式:[ i  if 条件 else 结果 for i in 可迭代的  ]   满足 if 条件,将 i 存在列表中,如果不满足if 条件,那就的满足else 条件,然后将 else 操作后的数据,存在列表中  [ 结果1 if 条件  else 结果2 for i in 可迭代的 ]

案例: 如果是h开头的纯字母,则将首字母大写,不是h开头的,全部转成大写

list = ['b6sd', 'hello', '100', 'world']
list2 = [world.title() if world.isalpha() and world.startswith('h') else world.upper() for world in list]  # .title()将首字母大写  .isalpha()  isalpha 是否是纯字母  startswith('h')  是否是h开头  .upper() 将字符串中小写的字母转成大写
print(list2)

两个for 循环

a = [(x,y) for x in range(3) for y in range(3)]
print(a)

三个for 循环

a = [(x, y) for x in range(1, 3) for y in range(3) for z in range(4, 6)]
print(a)

b = [(x, y, z) for x in range(1, 3) for y in range(3) for z in range(4, 6)]
print(b) 

案例:写出一段python,代码实现分组一个 list  里面的元素,比如 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

a = [a for a in range(1, 10)]
b = [a[x:x + 3] for x in range(0, len(a), 3)]
print(b)

解释:先使用 for 循环,打印1~9的,存入到一个 a 的列表中,在使用步长为 3 的 for 循环,控制起始值,在通过切片,取切割列表 a ,从 x 位置到 x+3 ,进行切割

或者

a = [[i, i + 1, i + 2] if i <= 98 else [i for i in range(i, 101)] for i in range(1, 101, 3)]

解释:else [i for i in range(i, 101)] 会将单独的一个打出来

或者

a = [[j for j in range(i, i + 3)] for i in range(1, 100, 2)]

案例:找出里面名字含有两个 ‘a’ 的放到新的列表中
name = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

name = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
        ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

a = [y for x in name for y in x if y.lower().count('a') >= 2]
print(a)

16、集合推导式

集合推导式跟列表推导式的用法一致,只不过有了集合的特性,去重
格式:使用 { }

list1 = [1, 2, 2, 3, 4, 4, 5, 1, 4, 2]
set1 = {i for i in list1}
print(set1)

list1 = [1, 2, 2, 3, 4, 4, 5, 1, 4, 2]
list2 = [i for i in list1]
print(list2)

17、字典推导式

字典推导式跟列表推导式的用法一致,只不过有了字典的特性,key:value
格式:使用 { key:value }

dict1 = {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'E'}
newdict = {value: key for key, value in dict1.items()}
print(dict1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值