【有书共读11】零压力学Python读书笔记04

但行好事,莫问前程。

第六章

  1. 索引和函数enumerate;
    # 我们经常会遇见这样的情况:将一个列表打印出来,并在前面加上序号
    import random
    
    my_list = []
    for i in range(10):
        my_list.append(random.randint(0, 100))
    
    # 方法1:使用range函数和列表来实现
    for i in range(len(my_list)):
        print(i + 1, my_list[i])
    
    # 方法2:通过变量来实现
    m = 1
    for i in my_list:
        print(m, i)
        m += 1
    
    # 方法3:通过enumerate函数实现
    for index, p_str in enumerate(my_list, 1):
        print(index, p_str)
    # 前面两种方法就不详细说了,重点说第三种里面的enumerate函数
    '''
    for index, p_str in enumerate(my_list, 1):
        print(index, p_str)
    
    1:for 里面的迭代器有两个index 和p_str 其中index表示需要的序号,
        p_str则是my_list里面的内容
    2:enumerate 函数也是传递了两个参数,第一个是列表,第二个是序号的起始数字
    3:需要注意的是关键字 in 前面的两个参数的顺序和
        enumerate函数里面的两个参数的顺序并不是一样的
    
    '''
  2. 再谈 字符串方法format
    # 一:简单格式的设置
    info = 'my name is {}.'
    print(info.format('子永'))
    # 输出结果为 my name is 子永.
    
    # 二:设置字段宽度----{:n}
    info = 'my name is {:4}.'
    print('**************************')  # 用作对比
    print(info.format('子永'))
    """
    上面语句的运行结果,注意'.'的位置
    **************************
    my name is 子永  .
    """
    
    # 三:在设置字段宽度的前提下设置对其方式
    # 右对齐-->{:>n}    左对齐-->{:<n}     居中-->{:^n}
    # 我们设置字段宽度为五个字符并分别以三种对其方式,打印10以内的奇数
    
    # 右对齐-----注意,数字字段的默认对其方式是右对齐,所以{:<n}和{:n}是等效的
    print("*****")  # 对比
    for i in range(1, 10, 2):
        print('{:>5}'.format(i))
    # 左对齐-----注意对非数字字段而言,默认是左对齐,所以{:<n}和{:n}是等效的
    for i in range(1, 10, 2):
        print('{:<5}'.format(i))
    # 居中
    for i in range(1, 10, 2):
        print('{:^5}'.format(i))
    
    
  3. 简单的列表推导式
    # 先来看一个简单的例子 我们需要将old_list里面的每个元素的平方生成一个新的列表
    old_list = [1, 2, 3, 4, 5]
    
    new_list = [i ** 2 for i in old_list]  # 只需要这一行代码就搞定
    print(old_list)
    print(new_list)
    """
    输出结果
    [1, 2, 3, 4, 5]
    [1, 4, 9, 16, 25]
    
    我们用文字来表述一下
    新列表 = [表达式 for循环头]
    new_list = [i ** 2 for i in old_list]
    那么对上面这个列表推导式的解释应该就是:
    对old_list里面的每个i 都将它平方后追加到new_list列表里面
    """
    
  4. 二维列表推导式
    """
    形式: new_list=[表达式 for语句1 for语句2]
    我们可以理解为
    new_list=[]
    for语句1:
        for语句2:
            new_list.append(表达式)
    
    """
    # 看一个例子
    new_list = [i * j for i in range(1, 3) for j in range(1, 3)]
    print(new_list)
    # 打印的结果为 [1, 2, 2, 4] 其实是[1*1,1*2,2*1,2*2]
    # 上面的二维列表推导式相当于下面的语句
    new_list = []
    for i in range(1, 3):
        for j in range(1, 3):
            new_list.append(i * j)
  5. 包含条件的列表推到式
    """
    形式 新的列表=[表达式 for循环1~n 条件]
    这里面for循环可以出现多次,所以我用1~n表示 
    多个for循环就表示式多嵌套
    """
    # 看一个例子---我们对上面那个例子添加一个条件
    new_list = [i * j for i in range(1, 4) for j in range(1, 4) if i > j]
    print(new_list)  # 这里的输出结果是 [2, 3, 6]
    
    # 对上面的列表推导式的等价为
    new_list1 = []
    for i in range(1, 4):
        for j in range(1, 4):
            if i > j:
                new_list1.append(i * j)
    print(new_list1)  # 这里的输出结果是 [2, 3, 6] 可以看出来和上面一
  6. 集合简介---set{}
    """
    1 集合中的元素必须是独一无二的,相同的值不能出现两次,这个和列表不同
    2 集合中元素的顺序是无关紧要的 即{1,2,3}和{3,2,1}是相同的
    3 集合显示时 通常是以一定的顺序显示的
    """
    # 集合的定义---{}
    a = {1, 2, 3}
    b = {3, 2, 1}
    print(a)
    print(type(a))
    print(b)
    print(a == b)
    """
    输出结果为
    {1, 2, 3}
    <class 'set'>
    {1, 2, 3}
    True
    我们可以看出,对与集合a和集合b而言,当给它们打印出来的时候,
    它们显示的是一样的
    """
第7章;
  1. 使用引号创建字符串
    """
    我们可以使用单引号('') 双引号("")三引号('''''')创建字符串
    但要注意使用的引号需要一致
    当我们使用单引号创建字符串的时候,该字符串里面可以含有双引号
    同理 使用双引号创建字符串的时候,该字符串里面可以含有单引号
    三引号里面的字符串一般又称多行字符串  例如我们现在书写注释的这个
    地方就是一个多行字符串
    """
    s1 = '666"666'
    s2 = "I'm a boy"
    s3 = """三引号可以用来写注释 它可以包含‘和 ”。"""
    s4 = r'这个字符串在前面加了一个r 它表示里面的所有反斜线不表示转义\n'
    print(s1, s2, s3, s4, sep='\n')
    

  2. 字符串的索引和切片
    """
    字符串的索引和切片和列表的差不多相同,所以这里面就不在详细总结了
    """
  3. 字符串和数字之间的转换
    """
    字符串转数字 ---不一定转换成功
    int() 转成整数
    float()转成浮点数
    如果要转换的字符串就不是一个数字的形式,那么会转换失败
    数字转字符串
    str()
    
    """
    s = '321'
    print(int(s))  # 输出结果为 321
    
    s = '23.34'
    print(float(s))  # 输出结果为 23.34

  4. 剔除多余的字符---strip(chars)
    """
    这个方法用来剔除开头和末尾的字符并返回新的字符串
    默认也是最常用的是剔除空格
    """
    
    s = '   hello boy  '
    print(s.strip(), len(s.strip()))  # 输出结果为:hello boy 9 中间的空格并不会剔除
    
    # 如果指定了参数chars,将删除chars指定的每一个字符---如果它位于开头或结尾(不要求这些字符一起出现)
    s = r'+-*/*-+-/I-am+a*boy/!/*-+//*-+'
    # 我们调用strip方法剔除前后的+ - * / 符号
    s = s.strip('+-*/')
    print(s)  # 输出结果为I-am+a*boy/! 注意它只会剔除前后的,中间的不会剔除
  5. 使用split拆分字符串
    """
    功能:将字符串以指定的分隔符分割为多个子串 组成一个列表返回
    默认split 是以空格为分割符的
    """
    s = 'I am a boy'
    s_list = s.split()
    print(s_list)  # 输出结果为 ['I', 'am', 'a', 'boy']
    
    name_str = '张三,李四,王五,赵六'
    name_list = name_str.split(',')
    print(name_list)  # 输出结果为['张三', '李四', '王五', '赵六']
  6. 通过拼接(+)创建字符串
    """
    对字符串来说 + 就意味着连接 
    """
    s1 = 'I am a boy.'
    s2 = 'I am 18 years old.'
    s = s1 + s2
    print(s)  # 输出结果为:I am a boy.I am 18 years old.
  7. join方法
    """
    将一个列表里面的元素通过指定的分割字符(或者分割字符串)连接成一个字符串并返回
    注:它只会在元素之间添加指定的分割符,而不会在末尾添加
    """
    name_list=['张三', '李四', '王五', '赵六']
    # 使用字符+将它们连接生成新的字符串
    name_str='+'.join(name_list)
    print(name_str)  # 输出结果为:张三+李四+王五+赵六
    # 注:  join方法只会在元素之间添加指定的分割符,而不会在末尾添加
    #       join 是字符串的方法,不是列表的方法
    #         join方法效率高,性能好
    
    
评论可能比正文精彩
#Python##笔记##读书笔记#
全部评论
初学python,还望赐教。
点赞 回复 分享
发布于 2019-03-31 13:39
麻烦请问第六章练习6.1.3索引为一时不打印第三个字段怎么实现
点赞 回复 分享
发布于 2019-03-31 13:38
""" 这是用来练习的项目---第六章 """ """ 项目1 要求1:打印斐波拉契数列里面的前30个数,并加序号 要求2:对左边的序号要求左对齐占两个字符长度, 右边的斐波拉契数列的数右对齐占四个字符长度 """ def fblq(n):     """     :param n:     :return: 返回前n个斐波拉契数组成的一个列表     """     a = 1     b = 1     num = 2     r_list = [a, b]     while num < n:         a, b = a + b, a         r_list.append(a)         num += 1     return r_list def p_1():     """     项目1实现     :return:     """     fblq_list = fblq(30)     for index, item in enumerate(fblq_list, 1):         print('{:<2}{:>8}'.format(index, item)) """ 项目2 使用列表推导式 改写埃拉托色尼质数筛选法 如果不知道埃拉托色尼质数筛选法的我上一篇笔记上面应该有 """ def p_2(n):     """     实现方法: 先使用列表推导式生成所有的合数列表                 然后对2到n之间的所有不在合数列表之内的数就是质数了     :param n: 2到n之间的所有质数     :return:     """     com_list = {j for i in range(2, n) for j in range(i * 2, n, i)}     # 上面用集合set来代替列表,     # 这样的话可以使得下面的列表推导式减少很多重复的计算     # print(com_list)     # print(len(com_list))     prime_list = [j for j in range(2, n) if j not in com_list]     # print(prime_list)     # print(len(prime_list))     return prime_list """ 项目3 毕式三元数 a*a + b*b = c*c 实际就是满足勾股定理的数字 要求用 列表(集合)推导式实现 """ def bssyz(n):     """     :param n: 找到1-n 之间的所有毕式三元数     :return:     """     n_range = range(1, n + 1)     re_list = [(a, b, c) for a in n_range for b in n_range                for c in n_range if a ** 2 + b ** 2 == c ** 2]     return re_list # print(type(bssyz(10)[0]))
点赞 回复 分享
发布于 2018-08-08 18:23

相关推荐

点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务