美文网首页
Python Tutorial Lesson 2

Python Tutorial Lesson 2

作者: 夕颜00 | 来源:发表于2021-06-09 17:43 被阅读0次

    网址:https://github.com/raynardj/python4lq/blob/main/1.2_lesson2.ipynb
    大纲:介绍列表、字典、元祖、集合

    一、列表

    [ ]可以返回列表中的值

    #注意列表内容的缩进并不严格
    month_ab = ["dec", "jan", "feb", "mar",
                "apr", "may", "jun",
                "jul", "aug", "sep",
                "oct", "nov"
                ]
    
    print("The 1st month:\t",month_ab[0])
    print("The 3rd month:\t",month_ab[2])
    print("The last month:\t",month_ab[-1])
    print("The 3rd to 6th month:\t",month_ab[2:6])
    print("The first 2 month:\t",month_ab[:2])
    print("The last 3 month:\t",month_ab[-3:])
    print("Reverse the time!:\n",month_ab[::-1])
    

    输出:

    The 1st month:   dec
    The 3rd month:   feb
    The last month:  nov
    The 3rd to 6th month:    ['feb', 'mar', 'apr', 'may']
    The first 2 month:   ['dec', 'jan']
    The last 3 month:    ['sep', 'oct', 'nov']
    Reverse the time!:
     ['nov', 'oct', 'sep', 'aug', 'jul', 'jun', 'may', 'apr', 'mar', 'feb', 'jan', 'dec']
    

    上述从大列表变成小列表的过程叫做切片
    使用你新获得的切片技能返回4个列表:

    spring = month_ab[:3]
    summer = month_ab[3:6]
    autumn = month_ab[6:9]
    winter = month_ab[9:]
    print(spring,summer,autumn,winter)
    

    输出:

    ['dec', 'jan', 'feb'] ['mar', 'apr', 'may'] ['jun', 'jul', 'aug'] ['sep', 'oct', 'nov']
    

    还记得列表的元素可以是任何东西吗?这意味着一个列表可以包含更小的列表

    year = [spring, summer, autumn, winter]
    print(year)
    #[['dec', 'jan', 'feb'], ['mar', 'apr', 'may'], ['jun', 'jul', 'aug'], ['sep', 'oct', 'nov']]
    

    进阶:

    century = [year] * 5
    print(century)
    print("The 3rd years of a century,\n 3rd season, \n the last month", century[2][2][-1])
    

    输出:

    [[['dec', 'jan', 'feb'], ['mar', 'apr', 'may'], ['jun', 'jul', 'aug'], ['sep', 'oct', 'nov']], [['dec', 'jan', 'feb'], ['mar', 'apr', 'may'], ['jun', 'jul', 'aug'], ['sep', 'oct', 'nov']], [['dec', 'jan', 'feb'], ['mar', 'apr', 'may'], ['jun', 'jul', 'aug'], ['sep', 'oct', 'nov']], [['dec', 'jan', 'feb'], ['mar', 'apr', 'may'], ['jun', 'jul', 'aug'], ['sep', 'oct', 'nov']], [['dec', 'jan', 'feb'], ['mar', 'apr', 'may'], ['jun', 'jul', 'aug'], ['sep', 'oct', 'nov']]]
    The 3rd years of a century,
     3rd season, 
     the last month is: aug
    

    二、列表中的元素

    a = list("Eye of the tiger")
    print(a)
    print(list(i/3 for i in range(6)))
    print(list(list((range(i))) for i in range(6)))
    print(1==1)
    print(2==1)
    print(list(i%2==0 for i in range(6)))
    

    输出:

    ['E', 'y', 'e', ' ', 'o', 'f', ' ', 't', 'h', 'e', ' ', 't', 'i', 'g', 'e', 'r']
    [0.0, 0.3333333333333333, 0.6666666666666666, 1.0, 1.3333333333333333, 1.6666666666666667]
    [[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
    True
    False
    [True, False, True, False, True, False]
    
    练习

    这里有一些提示,猜猜在你运行“shift+enter”之前会出现什么:

    list0=list("WordsWillBeScatteredToLetters")
    list1=[0,True,3>5,4==6,20>10>0]
    list2=list(range(6))
    list3=[list2,list1+list0]
    
    print(list0)
    print(list1)
    print(list2)
    print(list3)
    

    out:

    ['W', 'o', 'r', 'd', 's', 'W', 'i', 'l', 'l', 'B', 'e', 'S', 'c', 'a', 't', 't', 'e', 'r', 'e', 'd', 'T', 'o', 'L', 'e', 't', 't', 'e', 'r', 's']
    [0, True, False, False, True]
    [0, 1, 2, 3, 4, 5]
    [[0, 1, 2, 3, 4, 5], [0, True, False, False, True, 'W', 'o', 'r', 'd', 's', 'W', 'i', 'l', 'l', 'B', 'e', 'S', 'c', 'a', 't', 't', 'e', 'r', 'e', 'd', 'T', 'o', 'L', 'e', 't', 't', 'e', 'r', 's']]
    

    三、循环

    1、简单形式

    for i in month_ab:
        Up=i.upper()  #upper case of a string
        print(Up)
    

    out:

    DEC
    JAN
    FEB
    MAR
    APR
    MAY
    JUN
    JUL
    AUG
    SEP
    OCT
    NOV
    

    生成一个列表

    MONTH_UP=list(i.upper() for i in month_ab)
    print(MONTH_UP)
    #['DEC', 'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV']
    

    2、if

    Month_Start_With_J=list(i for i in month_ab if list(i)[0]=="j")
    print(Month_Start_With_J)
    #['jan', 'jun', 'jul']
    

    3、if not in

    Month_Not_Start_With_J=list(i for i in month_ab if i not in Month_Start_With_J)
    print(Month_Not_Start_With_J)
    #['dec', 'feb', 'mar', 'apr', 'may', 'aug', 'sep', 'oct', 'nov']
    

    4、简写

    squares=[i**2 for i in range(10)]
    print(squares)
    #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    5、列表推导式

    summer = month_ab[3:6]
    print(eval("summer"))
    print(summer) 
    #两个输出相同
    

    out:

    ['mar', 'apr', 'may']
    ['mar', 'apr', 'may']
    

    eval() 函数用来执行一个字符串表达式,并返回表达式的值。
    实例
    以下展示了使用 eval() 方法的实例:

    >>>x = 7
    >>> eval( '3 * x' )
    21
    >>> eval('pow(2,2)')
    4
    >>> eval('2 + 2')
    4
    >>> n=81
    >>> eval("n + 4")
    85
    
    season_names=["spring","summer",
                  "autumn","winter"]
    # A combination of 2 expressions:
    for season in season_names: list(print(season+":"+mon) for mon in eval(season))
    # #也可以这样写:
    for season in season_names:
        list(print(season+":"+mon) for mon in eval(season))
    

    输出:

    spring:dec
    spring:jan
    spring:feb
    summer:mar
    summer:apr
    summer:may
    autumn:jun
    autumn:jul
    autumn:aug
    winter:sep
    winter:oct
    winter:nov
    

    有关python列表推导式的更多信息:http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/

    现在想象一下用其他编程语言写这些
    如果熟悉这些表达式,就可以更快地编写循环
    注意,不要以这种方式对非常大的数据样本进行代码循环,python有专门的模块来加快对更大数据的循环
    让我们休息一下,讨论一下数据格式

    四、操作数据格式

    字符串的连接很简单:

    myname="Ray"
    print("My name is "+myname)
    #My name is Ray
    

    但我们不能这样做浮点数,运行以下程序,你会遇到错误

    # print("My name is" + myname + " and my height is" + 1.8532)
    #可以这样写
    print("My name is %s and my height is %.2f m"%(myname,1.8532))
    #My name is Ray and my height is 1.85 m
    

    %s表示字符串,但也有其他格式,请参阅:https://pyformat.info/

    练习

    1、创建一个看起来像“Dec”,“Jan”…(如“Nov”),每个月的第一个字母大写

    a = [mon.capitalize() for mon in month_ab]
    print(a)
    # ['Dec', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov']
    

    2、假设你有48名员工为你工作,每个月有4名员工可以领取你的奖金,你要为他们准备信封,给我一个像["Dec_1","Dec_2","Dec_3","Dec_4","Jan_1",…,"Nov_3","Nov_4"]的清单

    allP = list()
    for i in a:
        allP = allP + [i+"_"+str(num) for num in range(1,5)]
    print(allP)
    

    五、集合

    Set就像一个列表,但不同,你应该记住的最重要的特质是:集合包含唯一的项,集合不能包含列表

    girlfriend=list(["love","love"])
    print(girlfriend)
    # this is how you declare a set
    wife=set(["love","love"])  # build on a list
    parents={"mother","father"} # declare with curly braces
    print(wife)
    print(parents)
    

    输出:

    ['love', 'love']
    {'love'}
    {'mother', 'father'}
    

    可以使用updata增加元素:

    girlfriend=girlfriend+["love"]  #列表值可重复,不支持updata
    wife.update(["love"])
    parents.update(["father"])
    print(girlfriend)
    print(wife)
    print(parents)
    

    输出:

    ['love', 'love', 'love']
    {'love'}
    {'father', 'mother'}
    

    老实说,我只在需要删除重复元素时才使用set:

    longstring=list("Night gathers and here my watch begins")
    shrink=list(set(longstring))
    print(shrink)
    print("".join(shrink))
    

    输出:

    ['t', 'N', 'm', 'e', 'h', ' ', 'a', 'r', 's', 'c', 'b', 'i', 'w', 'g', 'y', 'n', 'd']
    tNmeh arscbiwgynd
    

    如果你想删除列表中的重复元素,在一个集合中运行它,然后将它转换回列表是最快的方法。
    您还可以看到,该集合不显示序列的原始顺序。
    List保留原始序列。集合不能。
    所以更有理由使用list。

    六、字典

    Dictionary是我最喜欢的简单性之一,在PHP、Javascript等语言中,list和Dictionary是不同类型的数组。但这里很清楚。
    Dictionary是键/值对的集合。是的,一组,因为不应该有相同的对。(至少没有相同的键)。
    字典最重要的特点是:“成对”。
    字典的一个好处是,你可以查找一个条目(键)
    那么,键是唯一的。

    isRepublican={"obama":False,
                  "trump":True,
                  "romney":True,
                  "clinton":False,
                  "sanders":False,
                  "rubio":True,
                 }
    # All keys should be unique
    fromHouse = {
        "Tyrion":"Lannister",
        "Eddard":"Stark",
        "Catelyn":"Tully",
        "Jon":"Stark",
        "Jaime":"Lannister",
        "Robert":"Baratheon",
        "Theon":"Greyjoy",
        "Daenerys":"Targaryen",
        "Aegon":"Targaryen",
        }
    
    print(isRepublican["obama"])
    print(fromHouse["Jaime"])
    #out:
    #False
    #Lannister
    

    迭代器有一点不一样:

    for key in fromHouse.keys():# Don't forget the ()
        print("Greetings, I am "+key)
    
    输出:
    Greetings, I am Tyrion
    Greetings, I am Eddard
    Greetings, I am Catelyn
    ...
    
    for v in fromHouse.values():
        print("I'm from house \"%s\""%(v))  # use \" to express double quotes inside double quotes
    
    输出:
    I'm from house "Lannister"
    I'm from house "Stark"
    I'm from house "Tully"
    ...
    
    for k, v in fromHouse.items():
        print("=" * 60 + "\nI'm %s of house \"%s\""%(k,v))
    
    输出:
    ============================================================
    I'm Tyrion of house "Lannister"
    ============================================================
    I'm Eddard of house "Stark"
    ============================================================
    I'm Catelyn of house "Tully"
    ============================================================
    ....
    
    candidates=["%s"%(k) for k in isRepublican.keys()]
    candidates_1=[k for k in isRepublican.keys()]
    print(candidates)
    print(candidates_1)
    
    #['obama', 'trump', 'romney', 'clinton', 'sanders', 'rubio']
    #['obama', 'trump', 'romney', 'clinton', 'sanders', 'rubio']
    
    Is_Repulican=dict((k[0].upper()+k[1:],v) for k,v in isRepublican.items())
    Is_Repulican_1={(k[0].upper()+k[1:],v) for k,v in isRepublican.items()}   #出错,不建议使用
    print(Is_Repulican)
    print(Is_Repulican_1)
    
    #{'Obama': False, 'Trump': True, 'Romney': True, 'Clinton': False, 'Sanders': False, 'Rubio': True}
    #{('Sanders', False), ('Romney', True), ('Clinton', False), ('Obama', False), ('Trump', True), ('Rubio', True)}
    

    进阶:def

    for k in Is_Repulican.keys():
        def trueFalseToWords(x):return "" if Is_Repulican[x] else "not "
        print("%s is %sa Replican presidential candidate"%(k,trueFalseToWords(k)))
    
    #Meanwhile this is equally true
    for k,v in Is_Repulican.items():
        def trueFalseToWords(isr):return "" if isr else "not "
        print("%s is %sa Replican presidential candidate"%(k,trueFalseToWords(v)))
    

    Enumerate()可以使用.items()将列表转换为有编号的字典。

    ##candidates=['obama', 'trump', 'romney', 'clinton', 'sanders', 'rubio']
    print(dict((k,v) for k,v in enumerate(candidates)))
    print(dict((v,"candidate No:%s"%(k)) for k,v in enumerate(candidates)))
    
    输出:
    {0: 'obama', 1: 'trump', 2: 'romney', 3: 'clinton', 4: 'sanders', 5: 'rubio'}
    {'obama': 'candidate No:0', 'trump': 'candidate No:1', 'romney': 'candidate No:2', 'clinton': 'candidate No:3', 'sanders': 'candidate No:4', 'rubio': 'candidate No:5'}
    
    

    七、元组

    另一种数据类型。
    元组不是很常用,它在传递形状和参数时很有用。
    您已经多次接触tuple

    print(1,2,3)
    
    #1 2 3
    

    你有么有想过什么是1,2,3

    a=1,2,3
    print(a)
    print(a[0],a[-1])
    print(type(a))
    
    #输出:
    (1, 2, 3)
    1 3
    <class 'tuple'>
    

    任何被“,”分隔但没有被[],{}覆盖的东西都是元组
    x, y = aFunctionReturn2Values ()
    那么x,y是一个元组。
    元组用于表示少量的数据。
    人们通常不会在上面写太多的计算。

    x,y=1,2; print(x)
    a,b,c,d,e=tuple(i**2 for i in range(5)); print(a,c,e)
    ace=a,c,e;print(ace[-1])
    
    输出:
    1
    0 4 16
    16
    

    练习

    请不要手动输入任何数据,使用代码创建变量
    1、创建一个字典whichSeason,这样我就可以检查whichSeason["Jan"]="winter"

    whichSeason = {"Jan":"winter"}
    print(whichSeason["Jan"])
    

    2、创建一个字典houseMap,键是房子的名字,值是一个人员列表:
    houseMap["stark"]=["Eddard","Jon"]
    houseMap["Baratheon"]=["Robert"]

    houseMap = {"stark":["Eddard","Jon"],
                "Baratheon":["Robert"]}
    print(houseMap["stark"],houseMap["Baratheon"])
    

    3、如果每个共和党人和民主党人都要单独进行辩论,给我一个详尽的名单,告诉我他们是如何配对的,并在字典中编号:
    注意人们不会和同党派的人争论。
    match={1:["Obama","Romney"],2:["Obama","Trump"]...}
    ["Obama","Romney"] and ["Romney","Obama"] are the same match, 不应该列出两次。

    gong = ["obama", 'trump', 'romney']
    min = ['clinton', 'sanders', 'rubio']
    
    all = list()
    for i in gong:
        for j in min:
            all.append([i,j])
    # print(all)
    
    list_final = dict((k,v) for k,v in enumerate(all))
    print(list_final)
    

    4、Create the dict of 2018, let year2018["Jan"][25]="Thursday"

    八、帮助

    正如我们宣称的那样:一个优秀的程序员可以通过谷歌搜索你的大多数障碍来适应新技术。在没有互联网的情况下,你仍然可以尝试一些更简单的方法,特别是当你一时想不起语法的时候。
    例如,我们会给我们的盟军传递一个加密信息。你的警官告诉你,你可以用"ord"函数。

    help(ord)
    

    ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

    print(ord("x"))
    #120
    word = "pizza will be ready in 12:30, and no one is watching"
    wordseq = [ord(i) for i in list(word)]
    print(wordseq)
    #[112, 105, 122, 122, 97, 32, 119, 105, 108, 108, 32, 98, 101, 32, 114, 101, 97, 100, 121, 32, 105, 110, 32, 49, 50, 58, 51, 48, 44, 32, 97, 110, 100, 32, 110, 111]
    
    mapping = dict((i,ord(i)) for i in set(word))
    print(mapping)
    #{'l': 108, 'g': 103, ',': 44, '3': 51, 'n': 110, 'h': 104, 'd': 100, 'w': 119, 'r': 114, 'e': 101, 's': 115, 'p': 112, 'o': 111, '0': 48}
    

    更多练习:https://www.w3resource.com/python-exercises/dictionary/

    相关文章

      网友评论

          本文标题:Python Tutorial Lesson 2

          本文链接:https://www.haomeiwen.com/subject/hkyeeltx.html