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)

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python编程语言中,有四种常用的集合数据类型,它们分别是列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)。列表是一种有序和可更改的集合,允许重复的成员。元组是一种有序且不可更改的集合,也允许重复的成员。字典是一个无序、可变且有索引的集合,其中没有重复的成员。而集合是一种无序和无索引的集合,没有重复的成员。这四种集合数据类型在Python中都有着不同的特点和用途。 在Python中,列表元组和字符串都属于序列,它们的元素都可以通过编号进行访问。而字典则属于映射,其中的元素是以键值对的形存在的。集合则不属于序列或映射中的任何一种,它是一种独立的数据类型,用于存储一组不重复的元素。 总结起来,Python中的列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)都是常用的集合数据类型,它们各自有着不同的特点和用途。列表是有序和可更改的集合元组是有序且不可更改的集合字典是无序、可变且有索引的集合集合是无序和无索引的集合。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [浅谈python四种集合数据类型—【列表元组集合字典】](https://blog.csdn.net/QWERTYzxw/article/details/121479048)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [python 元组集合字典](https://download.csdn.net/download/weixin_38603219/13752298)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值