image.png
工具下载: https://www.jetbrains.com/pycharm/download/

列表 list

Python 中可以通过组合一些值得到多种 复合 数据类型。其中最常用的 列表 ,可以通过方括号括起、逗号分隔的一组值(元素)得到。一个 列表 可以包含不同类型的元素,但通常使用时各个元素类型相同:

  1. a = []
  2. print(type(a))

和字符串(以及各种内置的 sequence 类型)一样,列表也支持索引和切片:

  1. l = [1,3,5,7,9]
  2. print(l[::-1])

列表同样支持拼接操作:

  1. a = [1,2,3]+[2,3,4]
  2. print(a)

列表同样支持*操作(重复次数):

  1. a = [1,2,3]*3
  2. print(a)

immutable 的字符串不同, 列表是一个 mutable 类型,就是说,它自己的内容可以改变:

  1. >>> cubes = [1, 8, 27, 65, 125] # something's wrong here
  2. >>> 4 ** 3 # the cube of 4 is 64, not 65!
  3. 64
  4. >>> cubes[3] = 64 # replace the wrong value
  5. >>> cubes
  6. [1, 8, 27, 64, 125]

列表常用方法

  1. a = [1,2,3,4]
  2. # 在列表元素末尾添加新元素
  3. a.append(5)
  4. print("append:",a)
  5. # 指定位置添加新元素
  6. a.insert(1,"helloword")
  7. print('insert:',a)
  8. # 删除最后一个元素
  9. a.pop()
  10. print('pop:',a)
  11. # 指定位置删除
  12. a.pop(0)
  13. print("pop 0:",a)
  14. # 删除指定值
  15. a.remove('helloword')
  16. print('remove:',a)
  17. # 返回元素在列表中的索引位置
  18. index = a.index(4)
  19. print('index:',index)
  20. # 统计元素出现的次数
  21. count= a.count(4)
  22. print('count:',count)
  23. # 复制一个副本
  24. b = a.copy()
  25. print("b",b)
  26. # 扩展列表
  27. a.extend([5,6,7])
  28. print("a:",a)
  29. # 倒序
  30. a.reverse()
  31. print('reverse:',a)
  32. # 排序
  33. a.sort()
  34. print(a)
  35. # 清空
  36. a.clear()
  37. print('clear:',a)

元组

一个元组由几个被逗号隔开的值组成,例如

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])
>>> v[0][2] = 10
>>> print(v)
([1, 2, 10], [3, 2, 1])

常用方法

  • index
  • count

集合 set

集合是由不重复元素组成的无序的集。

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # fast membership testing
True
>>> 'crabgrass' in basket
False
a =[1,2,3,4]
b = [3,4,5,6]

print( set(a) - set(b) ) # {1, 2}
print( set(a) | set(b) ) # {1, 2, 3, 4, 5, 6}
print( set(a) & set(b) ) # {3, 4}
print( set(a) ^ set(b) ) # {1, 2, 5, 6}

数据转换

a = 1,2,3,4,5,6
# tuple => set
print(type(set(a))) # set
a = 'abceddddfff'
# str => set
print(set(a))

思考:

  1. set 能不能转换为 str?
  2. str 能不能转换为 list,set?

字典

另一个非常有用的 Python 內置数据类型是 字典 (参见 映射类型 —- dict)。字典在其他语言里可能会被叫做 联合内存联合数组。与以连续整数为索引的序列不同,字典是以 关键字 为索引的,关键字可以是任意不可变类型,通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或 append()extend() 之类的方法来改变。
理解字典的最好方式,就是将它看做是一个 键: 值 对的集合,键必须是唯一的(在一个字典中)。一对花括号可以创建一个空字典:{} 。另一种初始化字典的方式是在一对花括号里放置一些以逗号分隔的键值对,而这也是字典输出的方式。
字典主要的操作是使用关键字存储和解析值。也可以用 del 来删除一个键值对。如果你使用了一个已经存在的关键字来存储值,那么之前与这个关键字关联的值就会被遗忘。用一个不存在的键来取值则会报错。
对一个字典执行 list(d) 将返回包含该字典中所有键的列表,按插入次序排列 (如需其他排序,则要使用 sorted(d))。要检查字典中是否存在一个特定键,可使用 [in](https://docs.python.org/zh-cn/3/reference/expressions.html#in) 关键字。
以下是使用字典的一些简单示例

tel = {'jack':4098,'sape':4139}
tel['guido'] = 4127
print(tel)
del tel['sape'] #删除 sape 字段
print(tel)
print(list(tel))
print(set(tel))
print(sorted(tel))
print('jack' in tel)
print('jack' not in tel)

d = [('sape', 4139), ('guido', 4127), ('jack', 4098)]

e = dict(d)
print(e)

字典的常用方法

d = [('sape', 4139), ('guido', 4127), ('jack', 4098)]

user = dict(d)
# 复制
user1 = user.copy()
print("copy:",user1)
# 更新字段
user.update(jack=4099)
print(f'update: {user}')
user.update(tom=4099)
print(f'update: {user}')
# 获取所有的键
keys = user.keys()
print(f"keys: {keys}")
# 获取所有的值
vals = user.values()
print(f"vals: {vals}")
# 删除指定 key
user.pop('tom')
print(f'pop: {user}')
# 删除最后一个元素
user.popitem()
print(f'popitem: {user}')
# 获取对应字段的值
v = user.get('sape')
print(f"get: {v}")
# 从一个字典根据此字典的字段 复制全新字典,默认值 为None
user2 = user.fromkeys(user)
print(f"fromekeys: {user2}")

if 判断

score = int(input("请输入一个数字"))
if score>=0 and score<60:
    print("差")
elif score>=60 and score<80:
    print("良")
elif score>=80 and score<=100:
    print("优")
else:
    print("输入有误")

for … in …

cases = [1,2,3,4,5,6,7,8,9,10]
for x in cases:
    print("执行case ",x)

# 循环执行 0-9999
for x in range(10000):
    print(x)

while

break 跳出循环

i=0
while True:
   i = i+10
   print(f'i: {i}')
   if i>100:
       break  # break 跳出While 循环
for x in range(100):
    print(f'x: {x}')
    if x > 10:
        break  # 跳出循环

while True:
    i = 0
    print('while ....')
    for x in range(10):
        print(f'for x {x}')
        if x > 3:
            break
    break