[oct]
在容器结构里的一些基本函数应用
注意在字符串中通常我们计数从0开始
def main():
str1 = 'hello'
print(len(str1))#字符串长度
print(str1.capitalize())#首字母大写
print(str1.find('ll'))#找到对应的字符 并且显示长度
print(str1.rfind('o'))#右往左找
print(str1.index('o')#不只是字符 包括数列也可以查找
print(str1.startswith('h'))#是否开始是什么
print(str1.endswith('o'))#是否结尾是什么
print(str1.center(20,'#'))#填充多少字符 以什么填充
print(str1.rjust(20,'$'))
str2 = 'a123456'
print(str2.isdecimal()) # 判断是否数字
print(str2.isalnum())# 判断是否数字字母
#print(str2.strip())# 去掉左右两边的空格
>该处为重点:即计数从0开始算
print(str2[3::3])#字符从第3个开始到后面且间隔为3
print(str2[-1])# 倒数第一个 但是倒数并没有0
print(str2[::2])
print(str2[2:])#2开始到最后
print(str2[1:3])#到第1个然后加上后面3-1位
print(str2[-1:-3:-1])如果是负数定义后面一定要有定义从右开始计数
>此处f为数组
f = [100, 300, 500]
for f in f:
print(f)
f.append(400)#添加到该组的最后
f.pop(1)#
del f[2]#
f.remove(100)
print(f)
#print(f.index(100, 3, 5)) # 表示寻找100 在3~5个数列中寻找
print(f.pop(0)) # 表示找到第几列数字提取出来并且删除里面的该元素
if __name__ == '__main__':
main()
下列有个定义函数新的结构意义
f = [100, 300, 500]
# 类似for in 但是下列意思为
# 在数组f中循环f次每次数字为a = f数组得数
for a in f:
print(a)
from random import randint
#容器结构【】
def main():
#有了列表(容器)我们可以使用1个变量保存多个数据
# 更为重要的是我们可以使用循环对列表中保存的数据进行操作
f = [0] * 6
for _ in range(10000):
a = randint(1, 6)
f[a - 1] += 1
for x in range(6):
print('%d是%d' % (x + 1, f[x]))
#函数 enumerate 表示可以取出列表里的对列和数值/
如果要对list实现类似Java那样的下标循环怎么办?/
Python内置的enumerate函数可以把一个list变成索引-元素对/
这样就可以在for循环中同时迭代索引和元素本身:/
for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C
f = [100, 200, 300]
for index, val in enumerate(f):
print(index, ':', val)
"""
因此上面还可以写为
for index, val in enumerate(f):
print('%d是%d' % (index, val))
"""
生成器
生成式 创建列表之后已经准备就绪所以需要耗费较多的内存空间
生成器 可以获取到数据 每次所需要数据的时候通过生成器取出数据 他不占用额外内存 当然这需要花更多的时间
时间和空间是不可调和的矛盾!
软件和硬件在逻辑上是等效的
def main():
f = ['aggs', 'ctreetert', 'dbfh', 'b']
# python内置的排序方法都是升序
# 如果希望排列成降序 可以通过reverse来指定
# python中的函数几乎都是没有副作用的
# 调用函数之后不会影响传入的参数
f2 = sorted(f, reverse=True)
print(f)
print(f2)
f.sort()
print(f)
# 表示字符串长短来排序
f3 = sorted(f, key=len)
print(f3)
def comparison(*args):
f = list(args) # 表示创建成列表生成式
# f = [x ** 2 for x in range(1,10)] 也表示创建列表 1到10的所有数的2次方的生成式 意味着不使用它也要算出来占内存
# f = (x ** 2 for x in range(1,10) 表示生成器 意味着不用它的时候就不会占内存
min_score = max_score = f[0]
a = 0
for x in f:
a += x
if x > max_score:
max_score = x
elif x < min_score:
min_score = x
print('最高分', max_score)
print('最低分', min_score)
print('平均分 %.2f' % (a / len(f)))
f = [x + y for x in 'ABCDE' for y in '1234']
if __name__ == '__main__':
rabit1()
复杂的生成器 yield
之前我们讲过生成器的用法 这次通过yield也可以生成 在def返回值 从而可以进行想取值但无法返回的作用
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
yield a
f = fib(20)
for val in fib(20):
print(val)