day7-列表和列表推导式

day7-列表和列表推导式

1.数学运算符:+、*

# 列表1 + 列表2  - 将两个列表中的元素合并产生一个新的列表
list1 = [100, 200, 300]
list2 = [10, 20]
print(list1 + list2)        # [100, 200, 300, 10, 20]

# 列表 * N / N * 列表   -  列表中的元素重复N次产生一个新的列表
print(list2 * 3)        # [10, 20, 10, 20, 10, 20]
print(list2 * 1)        # [10, 20]

2. 比较运算符:>、<、>=、<=、==、!=

# 补充:不同的类型可以是用==和!=来比较是否相等,但是不能使用>、<、>=、<=来比较大小
# 1)==、!=
print([10, 20, 30] == [10, 20, 30])     # True
print([10, 20, 30] == [10, 30, 20])     # False (列表有序)
print({10, 20, 30} == {30, 20, 10})     # True (集合无序)

# 2)>、<、>=、<=
# 两个列表比较大小,比较的是第一对儿不相等的元素的大小
print([10, 100, 200, 300] > [20, 1])
print([10, 100, 200, 300] > [10, 20, 100000000, 800, 9000])
print([10, 20, 30] > [10, 20])

4. max、min

# max(序列)   -  获取序列中最大的元素
# min(序列)   -  获取序列中最小的元素
nums = [10, 29, 78, 34, 56, 5, 72]
print(max(nums))
print(min(nums))

# nums = [10, 'abc', 23, 8]
# print(max(nums))      # 报错!

# students = [
#     {'name': '小明', 'age': 18, 'gender': '男', 'score': 99},
#     {'name': 'stu2', 'age': 23, 'gender': '女', 'score': 90},
#     {'name': 'stu3', 'age': 19, 'gender': '女', 'score': 81},
#     {'name': 'stu4', 'age': 30, 'gender': '男', 'score': 77},
#     {'name': 'stu5', 'age': 25, 'gender': '男', 'score': 86}
# ]
#
# print(max(students, key=lambda x: x['score']))

# 2. sum
# sum(数字序列)  - 求序列中所有元素的和
nums = [10, 29, 78, 34, 56, 5, 72]
print(sum(nums))
print(sum(range(101)))

# 3.sorted
# sorted(序列)  -  将序列中的元素从小到大排序,产生一个新的列表
# sorted(序列, reverse=True)   -  将序列中的元素从大到小排序,产生一个新的列表
nums = [10, 29, 78, 34, 56, 5, 72]
new_nums = sorted(nums)
print(new_nums)     # [5, 10, 29, 34, 56, 72, 78]

nums = [10, 29, 78, 34, 56, 5, 72]
new_nums = sorted(nums, reverse=True)
print(new_nums)     # [78, 72, 56, 34, 29, 10, 5]

# 4. len
# len(序列)  - 获取序列中元素的个数
print(len([10, 20, 30]))
print(len('abc123'))
print(len(range(5, 100)))

# 5.list
# list(序列) - 将序列的元素作为列表的元素创建一个新的列表
print(list('abc'))          # ['a', 'b', 'c']
print(list(range(3)))       # [0, 1, 2]

5.列表的相关方法

# 列表.append(元素)
# 列表.insert(下标, 元素)
# 列表.remove(元素)
# 列表.pop()

# 1. 列表.clear()  - 清空列表
nums = [10, 20, 34, 89]
nums.clear()
print(nums)     # []

# 2. 列表.copy()  - 复制列表产生一个一模一样的新列表
# 列表.copy()  - 浅拷贝
# 列表[:]、列表*1、列表+[] 都是浅拷贝
nums = [10, 20, 34, 89]
new_nums1 = nums.copy()
print(new_nums1)         # [10, 20, 34, 89]

# 变量在保存数据的时候保存的其实是数据在内存中的地址(Python中的变量全是指针变量)。一个变量直接给另外一个变量赋值,赋的是地址
new_nums2 = nums
print(new_nums2)        # [10, 20, 34, 89]

print('nums的id:', id(nums))             # 4366826816
print('new_nums1的id:', id(new_nums1))       # 4366516864
print('new_nums2的id:', id(new_nums2))       # 4366826816

nums.append(100)
print(new_nums1)            # [10, 20, 34, 89]
print(new_nums2)            # [10, 20, 34, 89, 100]

# 3. 列表.count(元素)  - 统计列表中指定元素的个数
nums = [10, 20, 34, 89, 10, 34, 80, 10]
print(nums.count(10))    # 3

c1 = nums.count(5)
print(c1)       # 0

# 4. 列表.extend(序列)  -  将序列中的元素全部添加到列表中
nums = [100, 200]
# nums.append([10, 20])
# print(nums)   # [100, 200, [10, 20]]

nums.extend([10, 20])
print(nums)     # [100, 200, 10, 20]

nums.extend('abc')
print(nums)     # [100, 200, 10, 20, 'a', 'b', 'c']

# 5. 列表.index(元素)  -  获取元素在列表中的下标值(0开始的下标值)
# 如果元素有多个返回第一个的下标;如果元素不存在会报错。
nums = [10, 20, 34, 89, 10, 34, 80, 10]
result = nums.index(20)
print(result)       # 1

result = nums.index(89)
print(result)       # 3

result = nums.index(10)
print(result)       # 0

# result = nums.index(100)          # 报错:ValueError: 100 is not in list

# 6.列表.reverse()  -  列表逆序
nums = [10, 28, 90, 67, 20]
nums.reverse()
print(nums)     # [20, 67, 90, 28, 10]


nums = [10, 28, 90, 67, 20]
result = nums[::-1]
print(result)       # [20, 67, 90, 28, 10]


# 7. 排序
# 列表.sort()  / 列表.sort(reverse=True)
# sorted(序列) / sorted(序列, reverse=True)
nums = [10, 28, 90, 67, 20]
result = sorted(nums)
print(nums)     # [10, 28, 90, 67, 20]
print(result)   # [10, 20, 28, 67, 90]

nums = [10, 28, 90, 67, 20]
result = nums.sort()
print(nums)     # [10, 20, 28, 67, 90]
print(result)   # None

6.列表推导式

# 列表推导式 -  快速创建列表的表达式

# 1.推导式结构1
"""
[表达式 for 变量 in 序列]    -   让变量去序列中取值,一个一个的取,取完为止,每取一个值就将表达式的值作为列表的一个元素
"""
list1 = [10 for x in 'abc']
print(list1)        # [10, 10, 10]

list2 = [x*2 for x in range(5, 11)]
print(list2)        # [10, 12, 14, 16, 18, 20]

# 练习1: 使用列表推导式获取nums中所有元素的个位数
# [3, 9, 0, 6, 1, 2]
nums = [23, 89, 90, 56, 41, 802]
result = [x % 10 for x in nums]
print(result)

# 练习2:是用列表推导式将nums中所有的元素乘以10
# [230, 890, 900, 560, 410, 8020]
nums = [23, 89, 90, 56, 41, 802]
result = [x * 10 for x in nums]
print(result)

# 练习3:已知分数列表,将列表中的元素全部换成'及格' - True 或者'不及格'-False
#  [True, True, False, True, False, True]
scores = [90, 78, 45, 67, 39, 89]
result = [x >= 60 for x in scores]
print(result)

# ['及格', '及格', '不及格', '及格', '不及格', '及格']
result = ['及格' if x >= 60 else '不及格' for x in scores]
print(result)

# 练习4:已知一个数字列表,将列表中所有的偶数除以2,所有的奇数乘以2
# [46, 178, 45, 28, 82, 401]
nums = [23, 89, 90, 56, 41, 802]
result = [x*2 if x % 2 else x/2 for x in nums]
print(result)

# 2.推导式结构2
"""
[表达式 for 变量 in 序列 if 条件语句]

创建一个列表;
变量去序列取值,一个一个的取,取完为止,每取一个值就判断条件语句是否为True,如果为True就计算表达式的结果为列表的元素
"""
result = [x for x in range(10, 21) if x % 2]
print(result)   # [11, 13, 15, 17, 19]

# 练习1:使用列表推导式提取nums中所有的奇数
# [23, 89, 41]
nums = [23, 89, 90, 56, 41, 802]
result = [x for x in nums if x % 2]
print(result)

# 练习2:已知一个列表,提取列表中所有的字符串
# ['hello', '12']
list1 = [10, 23.9, 'hello', True, '12', 0]
result = [x for x in list1 if type(x) == str]
print(result)

# 练习3:已知一个列表,提取列表中所有的整数,并且将整数加3
# [13, 3, 5]
list1 = [10, 23.9, 'hello', True, '12', 0, 2]
result = [x+3 for x in list1 if type(x) == int]
print(result)

7.补充三目运算符

# C和Java
"""
表达式?值1:值2   -  如果表达式的值为真结果就是值1,否则结果是值2
"""

# python
"""
值1 if 表达式 else 值2  -  如果表达式的值为True结果就是值1,否则结果是值2
"""
age = 8
result = '成年' if age >= 18 else '未成年'
print(result)

a = 1
b = 2
result = b * 2 if a > 0 else b / 2
print(result)

8.元组

# 元组就是不可变的列表
# 查、in和not in、数学运算、比较运算、相关函数   -   元组都支持

# 1.什么是元组(tuple)
"""
(元素1, 元素2, 元素3, ....)
不可变的;有序
"""
# 空元组
t1 = ()
print(t1, type(t1))

# 有一个元素的元组: (元素,)
t2 = (10,)
print(t2, type(t2))


t3 = (10, 23, 78, 90, 67, 89)
print(t3[1])
print(t3[-1])
print(t3[-3:])      # (90, 67, 89)
上一篇:Is Sampling Heuristics Necessary in Training Deep Object Detectors? 论文笔记


下一篇:GIT原理之最近公共祖先