007字符串和常用数据结构---100天学python

字符串
s1 = '\'hello, world!\'' #'hello, world!' (\是转义符)
s2 = r'\n\\hello, world!\\\n' # \n\\hello, world!\\\n (不希望字符串中的\表示转义)

str2 = 'abc123456'
print(str2[::-1]) # 654321cba反转
print(str2[-3:-1]) # 45

str3 = ' jackfrued@126.com '
print(str3.strip()) # 获得字符串修剪左右两侧空格之后的拷贝

列表
list1 = [1, 3, 5, 7, 100]
list1.insert(1, 400) # [1, 400,3, 5, 7, 100]
list1[1] = 300 # [1, 300,3, 5, 7, 100]
list1.pop() # 是100 执行后 list1=[1, 300,3, 5, 7]

list1 = ['orange', 'apple', 'zoo', 'internationalization', 'blueberry']
list2 = sorted(list1) #list1不会变
list1.sort(reverse=True) #list1会变
# sorted函数返回列表排序后的拷贝不会修改传入的列表 list1不会变
# 函数的设计就应该像sorted函数一样尽可能不产生副作用

#列表的生成式
# 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
f = [x + y for x in 'ABCDE' for y in '1234567']
print(sys.getsizeof(f)) # 查看对象占用内存的字节数
print(f) #两重循环

#生成器对象
#生成器可以获取到数据但它不占用额外的空间存储数据
# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式,生成器不占用存储数据的空间

Python中还有另外一种定义生成器的方式,
就是通过yield关键字将一个普通函数改造成生成器函数

#实现一个生成斐波拉切数列的生成器
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
yield a

#遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
对yield没有什么认识,
yield使用参见廖雪峰官网 python教程-高级特性--生成器
https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128

元组
t = ('骆昊', 38, True, '四川成都')
# 重新给元组赋值
# t[0] = '王大锤' # TypeError,元组中的元素是无法修改的
t = ('王大锤', 20, True, '云南昆明')
# 将元组转换成列表
person = list(t)
# 将列表转换成元组
person_tuple = tuple(person)
列表和元组比较:元组中的元素是无法修改的,元组在创建时间和占用的空间上面都优于列表

集合
set1 = {1, 2, 3, 3, 3, 2}
# 将元组转换成集合
set3 = set((1, 2, 3, 3, 2, 1))

字典
键值对
scores = {'骆昊': 95, '白元芳': 78, '狄仁杰': 82}
print(scores['骆昊']) # 95
for elem in scores:
print('%s\t--->\t%d' % (elem, scores[elem])) # 骆昊 ---> 95

练习6:打印杨辉三角。

参考答案:

def main():
num = int(input('Number of rows: '))
yh = [[]] * num
for row in range(len(yh)):
yh[row] = [None] * (row + 1)
for col in range(len(yh[row])):
if col == 0 or col == row:
yh[row][col] = 1
else:
yh[row][col] = yh[row - 1][col] + yh[row - 1][col - 1]
print(yh[row][col], end='\t')
print()


if __name__ == '__main__':
main()

 

sample([1,5,3,2,6,7,8,9], 6)  random模块的sample函数来实现从列表中选择不重复的6个元素

posted @ 2019-09-27 11:04  九树  阅读(118)  评论(0)    收藏  举报