第016講:序列!序列! (課后測試題及答案 )


一、列表、元組和字符串的共同點

1.都可以通過索引得到每一個元素

2.默認索引值總是從0開始

3.可以通過分片的方法得到一個范圍內的元素的集合

4.有共同的操作符(重復操作符、成員關系操作符、拼接操作符)

二、序列常見的BIF

1.list():把一個可迭代對象轉化為一個列表

list本身作為一個方法,有2中形態:無參數、有參數

無參數,就是生成一個空的列表

>>> list()
[]
>>> 

有參數

>>> a = 'I love Fishc.com'
>>> a = list(a)
>>> a
['I', ' ', 'l', 'o', 'v', 'e', ' ', 'F', 'i', 's', 'h', 'c', '.', 'c', 'o', 'm']
>>> b = (1,1,2,3,5,8,13,21,34)
>>> b = list(b) #元組轉化為列表
>>> b
[1, 1, 2, 3, 5, 8, 13, 21, 34]
>>> 

 

2.tuple():把一個可迭代對象轉化為元組

>>> b
[1, 1, 2, 3, 5, 8, 13, 21, 34]
>>> b = tuple(b)
>>> b
(1, 1, 2, 3, 5, 8, 13, 21, 34)
>>> 

  >>> str1 = 'I love Fishc.com'
  >>> tuple(str1)
  ('I', ' ', 'l', 'o', 'v', 'e', ' ', 'F', 'i', 's', 'h', 'c', '.', 'c', 'o', 'm')
  >>>

3.str()

>>> b
(1, 1, 2, 3, 5, 8, 13, 21, 34)
>>> b = str(b)
>>> b
'(1, 1, 2, 3, 5, 8, 13, 21, 34)'
>>>

  >>> b = [1,2,3,4]
  >>> str(b)
  '[1, 2, 3, 4]'
  >>>

4.len(sub):返回參數sub的長度

5.max():返回序列或者參數集合中的最大值

>>> max('a','o','v','e') #V的ASCII碼是最大的
'v'
>>> numbers = [1,34,45,-98,0,98]
>>> max(numbers)
98
>>> 

>>> max((1,2,3,4))
4
>>> max([4,2,3,1])
4
>>>

>>> max([1,2,3],[3,4,5],[0,5,3])#max參數的中列表比大小,比list[0]的大小
[3, 4, 5]
>>> max([1,2,3],[3,4,5],[4,0,0])
[4, 0, 0]

6.min():返回序列或者參數集合中的最小值

>>> numbers = [1,34,45,-98,0,98]
>>> min(numbers)
-98
>>> chars = '1234567890'  #數字字符串
>>> min(chars)            #字符串的0的ASCII最小,是30,這個點要注意
'0'
>>> 

  >>> min((1,2,3,4,5))
  1
  >>> min([2,3,4,1,5,6])  
  1

>>> min([1,2,3],[3,4,5],[4,0,0])
[1, 2, 3]
>>>

>>> a = [1,3,4,6,9,7,'a']
>>> max(a)
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    max(a)
TypeError: '>' not supported between instances of 'str' and 'int'
>>> 

7.sum(iterable[,start = 0]):返回序列參數iterable 和可選參數start的總和.

>>> tuple1 = (1.2,4.5,6.7)
>>> sum(tuple1)
12.4
>>> sum(tuple1,10)
22.4
>>> chars
'1234567890'
>>> sum(chars)
Traceback (most recent call last): File "<pyshell#27>", line 1, in <module>
    sum(chars)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 
>>> sum(3,5,7)
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    sum(3,5,7)
TypeError: sum() takes 1 positional argument but 3 were given
>>> sum([3,4,5])
12
>>> 

注意:

1.使用max()、min()、sum()方法,參數中的數據類型必須是一致的,否則會報錯,不支持不同類型的比較、相加。

2.上述都是序列的BIF,參數必須是一個序列,下面將的內置函數也是序列的BIF,

>>> sorted(1,3,2,5)
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
sorted(1,3,2,5)
TypeError: sorted expected 1 argument, got 4
>>> sorted([1,3,2,5])
[1, 2, 3, 5]
>>>

 

8.sorted():返回一個排序的列表(默認是從小到大排序)

sort()是列表的方法,使用時list.sort(),而sorted()是序列的內置函數

>>> num = [2,6,8,34,65,34,56,23,-98,45]
>>> sorted(num)
[-98, 2, 6, 8, 23, 34, 34, 45, 56, 65]
>>> 

9.reversed():返回一個序列的翻轉

reverse()是列表的方法,使用時list.reverse(),而reversed()是序列的內置函數

>>> num
[2, 6, 8, 34, 65, 34, 56, 23, -98, 45]
>>> reversed(num)
<list_reverseiterator object at 0x02B52D48>
>>> list(reversed(num))
[45, -98, 23, 56, 34, 65, 34, 8, 6, 2]
>>>

10.enumrate():枚舉,生產由每個元素的index值和item值組成的元組

>>> num
[2, 6, 8, 34, 65, 34, 56, 23, -98, 45]
>>> enumerate(num)
<enumerate object at 0x02B32188>
>>> list(enumerate(num))
[(0, 2), (1, 6), (2, 8), (3, 34), (4, 65), (5, 34), (6, 56), (7, 23), (8, -98), (9, 45)]
>>> 

11.zip():返回由各個參數的序列組成的元組

>>> a = [1,2,3,4,5,6,7,8]
>>> b =[9,8,7,6]     #列表b沒有的,列表a直接省去
>>> list(zip(a,b))  #將a,b打包
[(1, 9), (2, 8), (3, 7), (4, 6)]   
>>> 

 

課后習題:

測試題

0. 我們根據列表、元組和字符串的共同特點,把它們三統稱為什么?

     序列

1. 請問分別使用什么BIF,可以把一個可迭代對象轉換為列表、元組和字符串?

    list()、tuple()、str()

2. 你還能復述出“迭代”的概念嗎?

    所謂迭代,是重復反饋過程的活動,其目的通常是為了接近並到達所需的目標或結果。每一次對過程的重復被稱為一次“迭代”,而每一次迭代得到的結果會被用來作為下一次迭代的初始值。

3. 你認為調用 max('I love FishC.com') 會返回什么值?為什么?

會返回:'v',因為字符串在計算機中是以ASCII碼的形式存儲,參數中ASCII碼值最大的是'v'對應的118。

>>> max('I love FishC.com')
'v'
>>> 

 

4. 哎呀呀,現在的小屁孩太調皮了,鄰居家的孩子淘氣,把小甲魚剛寫好的代碼畫了個圖案,麻煩各位魚油恢復下啊,另外這家伙畫的是神馬嗎?怎么那么眼熟啊!??

動動手

name = input('請輸入待查找的用戶名:')
score = [['迷途', 85], ['黑夜', 80], ['小布丁', 65], ['福祿娃娃', 95], ['怡靜', 90]]
IsFind = False
 
for each in score:
    if name in each: #if name == each[0]:也可以
        print(name + '的得分是:', each[1])
        IsFind = True
        break
    
if IsFind == False:
    print('查找的數據不存在!')

 

0. 猜想一下 min() 這個BIF的實現過程

def min(x):
    least = x[0]
    for each in x:
        if each < least:
            least = each
            
    return least

print(min('5679335'))

 

1. 視頻中我們說 sum() 這個BIF有個缺陷,就是如果參數里有字符串類型的話就會報錯,請寫出一個新的實現過程,自動“無視”參數里的字符串並返回正確的計算結果

#sum functions
def sum(x):
    results = 0
    for each in x:
        if (type(each)==int) or (type(each)==float):
            results += each
        else:
            continue
    return results
print(sum([2,3,4,'r','6',7.8,9.8]))

 

2. 請寫下這一節課你學習到的內容:格式不限,回憶並復述是加強記憶的好方式!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM