Bootstrap

python+Mosh网课笔记03控制流+04函数+05数据结构

 太久没写python代码了,学机器学习重新拾起python,笔记比较简陋。

参考:mosh的python教程

目录

一、控制流

二、函数functions

三、数据结构

list

stack

queue

tuple

swapping variables

array

sets

dictionary

解包


一、控制流

  • if判断
if xxx:
    xxx
elif xxx:
    xxx
else:
    xxx
  • and or not
  • 循环
for number in range(3):  # 从0开始,打到小于3的最小整数。
    print(number)

for number in range(1, 4):  # 从1开始,打到小于4的最小整数。
    print(number)

for number in range(1, 10, 2):  # 最后一个参数是step
    print(number)

while xxx:
    xxx

二、函数functions

def mul(x):
    xxx
    xxx

mul(x)

三、数据结构

list

letters = ["a", "b", "c"]
letters[0] = "A"  # 修改
print(letters[0:3])  # 从0开始3个元素。

chars = list("Hello world")  # 每个字符都是一个元素。

numbers = list(range(20))  # 0-19
print(numbers[::-1])  # 倒序输出
print(numbers[::2]) #step=2进行输出

numbers = [1, 2, 3]
first, second, third = numbers  # 分别赋值1,2,3
numbers += [4, 4, 4, 4, 4]
first, second, *other, last = numbers
# 分别赋值1,2,last被赋值list最后一个元素,其他元素赋值在单独的list类型的other中。

函数传参 与 循环中的list

#pack into list
def mul(*numbers):
    xxx
mul(1, 2, 3, 4, 5)  # 会把这5个数打包到一个list中,传给numbers


#loop over list
numbers = ["a", "b", "c"]
for number in numbers:
    print(number)

for number in enumerate(numbers):
    print(number)  # 获得索引和元素eg:(0,'a)
    print(number[0])  # 获得索引

for index, letter in enumerate(numbers):
    print(index, letter)

增删改查

letters = ["a", "b", "c"]


# Add
letters.append("d")  # 在末尾添加元素
letters.insert(0, "-")  # 指定位置


# Remove
letters.pop()  # 移除末尾元素
letters.pop(0)  # 移除指定位置元素
letters.remove("b")  # 移除指定元素
del letters[0:3]  # 移除指定范围元素。
letters.clear()  # 移除所有元素
print(letters)


#find
letters = ["a", "b", "c", "a"]
print(letters.index("a"))  # 返回元素出现的第一个位置。
# 如果不存在,则报错,可以先判断是否存在:
if "d" in letters:
    print(letters.index("d"))

print(letters.count("a"))  # 返回元素出现的个数。

排序

numbers = [3, 51, 2, 8, 6]
numbers.sort()  # 升序排列。
numbers.sort(reverse=True)  # 降序排列。
num = sorted(numbers)  # 返回一个新的列表,不改变原有的列表。
num = sorted(numbers, reverse=True)  # 返回新的降序列表。



#复杂list排序。
items = [
    ("Product1", 10),
    ("Product2", 9),
    ("Product3", 12),
]
items.sort()  # 按照每组第一个元素排序。
print(items)


#按照第二个元素排序。
items = [
    ("Product1", 10),
    ("Product2", 9),
    ("Product3", 12),
]
def sort_item(item):
    return item[1]
items.sort(key=sort_item)  。
print(items)


#lambda写法。
items = [
    ("Product1", 10),
    ("Product2", 9),
    ("Product3", 12),
]
items.sort(key=lambda item: item[1]) 
print(items)

map功能

items = [
    ("Product1", 10),
    ("Product2", 9),
    ("Product3", 12),
]

x = list(map(lambda item: item[1], items))
print(x)  # 10,9,12

filter功能

items = [
    ("Product1", 10),
    ("Product2", 9),
    ("Product3", 12),
]

x = list(filter(lambda item: item[1] >= 10, items))
print(x)
#[('Product1', 10), ('Product3', 12)]
items = [
    ("Product1", 10),
    ("Product2", 9),
    ("Product3", 12),
]

# x = list(map(lambda item: item[1], items))
x = [item[1] for item in items]
# x = list(filter(lambda item: item[1] >= 10, items))
x = [item for item in items if item[1] >= 10]
print(x)

zip功能

list1 = [1, 2, 3]
list2 = [10, 20, 30]

print(list(zip(list1, list2)))
#[(1, 10), (2, 20), (3, 30)]

print(list(zip("abc", list1, list2)))
# [('a', 1, 10), ('b', 2, 20), ('c', 3, 30)]

stack

browsing_session = []
browsing_session.append(1)
browsing_session.pop()
if browsing_session:  # 判断栈是否含元素。
    print(browsing_session[-1])  # 栈顶元素。

queue

from collections import deque
queue = deque([])
queue.append(1)
queue.append(2)
queue.append(3)
print(queue)
queue.popleft()  # 队首元素出队列。
print(queue)
if not queue:  # 判断空。
    print("empty")

tuple

tuple类型只读,不能做增删改等操作。

point = (1, 2)
# tuple类型只读。
print(point)

point = tuple("Hello World")
print(point)

swapping variables

x = 10
y = 11
x, y = y, x
print("x ", x)
print("y ", y)

array

数组内所有元素类型必须一样,比如都是int,都是float,或者都是str,否则报错。

from array import array #使用需导入包。

sets

set元素不重复。

numbers = [1, 1, 2, 3, 4, 5]
uniques = set(numbers)
print(uniques)
# {1, 2, 3, 4, 5}


second = {1, 3, 3}
second.add(5)
second.remove(5)
print(len(second))


second = {1, 3, 3}
first = {2, 3, 5}
print(first | second)  # {1, 2, 3, 5}
print(first & second)  # {3}
print(first - second)  # {2, 5}  减去second中相同的元素。
print(first ^ second)  # 舍去相同的元素合并。

dictionary

可以看作C++中的hash数组。计算字符串中字符出现的字数很方便。

# 2种声明方式。
point = {"x": 1, "y": 2}
point = dict(x=1, y=2)

# modify
point["x"] = 10

#delete
del point["x"]

# add
point["z"] = 20

# 如果不存在会报错,可以先判断。
if "a" in point:
    print(point["a"])

print(point.get("x")) #返回对应key值,如果没有返回None



#循环
for key in point:
    print(key, point[key])

for key, value in point.items():
    print(key, value)

from pprint import pprint
sentence = "This is a common interview"

char_frequency = {}
for char in sentence:
    if char in char_frequency:
        char_frequency[char] += 1
    else:
        char_frequency[char] = 1
pprint(char_frequency, width=1) #可以每行打印一个key,value。


print(sorted(char_frequency.items(), key=lambda item: item[1]))

解包

values = [*range(5), *"Hello"]
print(values)
#[0, 1, 2, 3, 4, 'H', 'e', 'l', 'l', 'o']


first = {"x": 1}
second = {"x": 10, "y": 2}
combined = {**first, **second, "z": 1}
print(combined)
#{'x': 10, 'y': 2, 'z': 1}

;