Python_基本概念_列表

 

Python中不需要先聲明變量名及其類型,直接賦值即可

字符串前面加字母r或R表示原始字符串,其中的特殊字符不進行轉義,但字符串的最後一個字符不能是\符號

在選擇和循環結構中,條件表達式的值只要不是False0(或0.00j等)、空值None、空列表、空元組、空集合、空字典、空字符串、空range對象或其他空迭代對象,Python解釋器均認爲與True等價。

變量類型:

數字:int,flat,complex

字符串:str  字符串支持使用+運算符進行合併以生成新的字符串

列表:list

字典:dict

元組:tuple

集合:set

布爾型:bool

空類型:None

x=3
print(type(x)) #int
x=3.5
print(type(x)) #float
x=3+5j
print(type(x)) #complex
x='hello world'
print(type(x)) #str
x=[1,2,3]
print(type(x)) #list
x=True
print(type(x)) #bool
x=(2,5,6)
print(type(x)) #tuple
x=None
print(type(x)) #NoneType

條件表達式

算術運算符:+、-、*、/、//、%、**

關係運算符:>、<、==、<=、>=、!=,可以連續使用

測試運算符:in、not in、is、is not

邏輯運算符:and、or、not,注意短路求值

位運算符:~&|^<<>>

矩陣乘法運算符:@

短路求值:當進行與運算時(a&&b),當a的值爲False時,則直接跳過b值的判斷

                  當進行或運算時(a||b),當a的值爲True時,則直接跳過b值的判斷 

x=3
y=4
z=x+y  #7
z=x-y    #-1
z=x*y    #12
z=x/y    #0.75
z=x//y #整除運算 0
z=x%y    #3
z=x**y #平方運算 81

z=x and y #4
z=x or y    #3
z=not y    #False

單分支結構 

if x :
    print("OK")

雙分支結構

if x :
    print("Ok")
else :
    print("No")
# value1 if condition else value2
print("True") if x else print("False")

多分支結構

#多分支
if x==1:
    print("1")
elif x==2 :
    print("2")
else :
    print("3")

Python中縮進代表代碼塊,取消括號

循環結構

#while
while x:
    break
#for
list=(1,2,3)
for x in list:
    print(x)
else:        #如果沒有break則執行else語句
    print("ok")
    #局部變量訪問比全局變量快

 例題

#編寫一個程序,完成以下功能。假設由變量a,判斷變量a是否爲偶數,若爲偶數,則輸出a爲偶數。無論變量a是否爲偶數,都把其值輸出出來。編寫函數:函數功能是將學生成績從百分制變換到等級制:
def prin():
        if (a % 2 == 0):
            print(a)
            print("a爲偶數")
        else:
            print(a)

#90分及以上 A
#80分-90分之間 B
#70分-80分之間 C
#60分-70分之間 D
#60分以下 E
def score(grade):
    if (grade >= 90):
        return "A"
    elif (grade >= 80 and a < 90):
        return "B"
    elif (grade >= 70 and a < 80):
        return "C"
    elif (grade >= 60 and a < 70):
        return "D"
    else:
        return "E"

#修改猜一猜小遊戲:( 使用random.randint(0, 10) )要求:可以不停猜,並提示猜大了還是猜小了,直到猜中爲止。
def game():
    ans = random.randint(0, 10)
    while True:
        num = input()
        num = int(num)
        if (num > ans):
            print("big")
        elif (num < ans):
            print("small")
        else:
            print("bingo")
            break
#主函數調用
if __name__=="__main__": #相當於C的main函數接口
    a = input()
    a=int(a)
    prin()
    grade=input()
    grade=int(grade)
    print(score(grade))
    game()

Python序列:列表、元組、字典、字符串、集合等

列表是Python中內置有序、可變序列,列表的所有元素放在一對中括號“[]”中,並使用逗號分隔開

在Python中,一個列表中的數據類型可以各不相同,可以同時分別爲整數、實數、字符串等基本類型,甚至是列表、元組、字典、集合以及其他自定義類型的對象

[10, 20, 30, 40]
['crunchy frog', 'ram bladder', 'lark vomit']
['spam', 2.0, 5, [10, 20]]
[['file1', 200,7], ['file2', 260,9]]

列表創建

使用=”直接將一個列表賦值給變量即可創建列表對象

a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
a_list = []               //空列表             

也可以使用list()函數將元組、range對象、字符串或其他類型的可迭代對象類型的數據轉換爲列表

a_list = list((3,5,7,9,11))
a_list
//[3, 5, 7, 9, 11]
list(range(1,10,2))
//[1, 3, 5, 7, 9]
list('hello world')
//['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
x = list()          //創建空列表                  

列表訪問

索引訪問方式:下標從0開始(可以逆向訪問,從尾開始爲-1)

切片訪問:[起始位置,最終位置,步長]

list_a = list[1:4:2] #起始位置爲1,終止位置爲4,步長爲2

列表運算符

列表之間可以使用 + 號和 * 號進行運算。這就意味着他們可以組合和複製,運算後會生成一個新的列表

表達式

結果

描述

[1, 2, 3] + [4, 5, 6]

[1, 2, 3, 4, 5, 6]

連接

['Hi!’] * 4

['Hi!', 'Hi!', 'Hi!', 'Hi!’]

重複

3 in [1, 2, 3]

True

元素是否存在

for x in [1, 2, 3]: print x

1 2 3

遍歷

列表常用方法

方法

說明

lst.append(obj)

在列表尾部添加新的元素

lst.extend(L)

將列表L中所有元素添加至列表lst尾部

lst.insert(index, obj)

在列表lst指定位置index處添加元素

lst.remove(x)

在列表lst中刪除首次出現的指定元素

lst.pop([index])

刪除並返回列表lst中下標爲index(默認爲-1)的元素

lst.clear()

清空列表,但保留對象

lst.index(obj)

從列表中找出某個值第一個匹配項的索引位置

lst.count(obj)

統計某元素在列表的出現次數

lst.reverse()

對列表lst所有元素進行逆序

lst.sort(key=None, reverse=False)

對列表lst中的元素進行排序,key用來指定排序依據,reverse決定升序(False)還是降序(True

lst.copy()

複製列表

列表元素增加

1)“+”運算符

aList = [3,4,5]
aList = aList + [7]
#[3, 4, 5, 7]

嚴格意義上來講,這並不是真的爲列表添加元素,而是創建了一個新列表,並將原列表中的元素和新元素依次複製到新列表的內存空間。操作速度較慢,在涉及大量元素添加時不建議使用該方法。

2append()方法

aList.append(9)
aList
#[3, 4, 5, 7, 9]

在當前列表尾部追加元素,原地修改列表,是真正意義上的在列表尾部添加元素,速度較快

所謂原地,是指不改變列表在內存中的首地址

id(aList)前後地址是不變的。

3extend()方法

a = [1,2,3]
id(a)
#25289752
a.extend([7,8,9])
a
#[1, 2, 3, 7, 8, 9]
>>> id(a)
#25289752
a.extend((15,17))
a
[1, 2, 3, 7, 8, 9, 15, 17]

    可以將另一個迭代對象的所有元素添加至該列表對象尾部。通過extend()方法來增加列表元素也不改變其內存首地址,屬於原地操作

4insert()方法

aList=[3, 4, 5, 7, 9, 11, 13, 15, 17]
aList.insert(3, 6)                #在下標爲3的位置插入元素6
aList
#[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]

將元素添加至列表的指定位置

注意: 會引發數據的移動!

列表元素的刪除

1del命令

刪除列表中的指定位置上的元素

a_list = [3,5,7,9,11]
del a_list[1]
a_list
#[3, 7, 9, 11]

2pop()方法

a_list = list((3,5,7,9,11))
a_list.pop()
#11
a_list
#[3, 5, 7, 9]
a_list.pop(1)
#5
a_list
#[3, 7, 9]

刪除並返回指定位置(默認爲最後一個)上的元素,如果給定的索引超出了列表的範圍則拋出異常

(3remove()方法

a_list = [3,5,7,9,7,11]
a_list.remove(7)
a_list
#[3, 5, 9, 7, 11]

    刪除首次出現的指定元素,如果列表中不存在要刪除的元素,則拋出異常

4clear()方法

a_list = [3,5,7,9,7,11]
a_list.clear()

  清空列表裏所有元素

列表計數

aList
#[3, 4, 5, 5.5, 7, 9, 11, 13, 15, 17]
aList.count(7)
#1
aList.count(0)
#0
aList.count(8)
#0

使用列表對象的count()方法統計指定元素在列表對象中出現的次數。

列表內置函數

函數

說明

len(list)

列表長度,即元素個數

max(list)

返回列表元素最大值

min(list)

返回列表元素最小值

list(seq)

將元組轉成列表

#請用索引取出下面list的指定元素
#L = [['Apple','Google','Microsoft'],['Java','Python','Ruby','PHP'],['Adam','Bart','Lisa']]
if __name__=="__main__":
L = [['Apple','Google','Microsoft'],['Java','Python','Ruby','PHP'],['Adam','Bart','Lisa']]
    for index in range(len(L)):
        print(L[index])

#遍歷下面的列表
#lst=['Apple','Google','Microsoft','Java','Python','Ruby','PHP']
LST = ['Apple','Google','Microsoft','Java','Python','Ruby','PHP']
    for index in range(len(LST)):
        print(LST[index])
x = [1,2,1,2,1,1,1]
for i in range(len(x)-1,-1,-1):  # range(起始位置,終止位置,每次操作)
        if x[i]==1:
        del x[i]


x = [1,2,1,2,1,1,1]
for i in x[::]:               #x[::] : 拷貝副本          #切片
     if i == 1:
	     x.remove(i)

列表排序

使用列表對象的sort()方法進行原地排序,支持多種不同的排序方法。

list.sort(key=None, reverse=False) 
>>> aList = [3, 4, 15, 11, 9, 17, 13, 6, 7, 5]
>>> aList.sort()                          #默認升序排序
>>> aList.sort(reverse = True)            #降序排序
>>> aList
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]

關鍵字問題

list.sort(key=None, reverse=False)

key=函數名,該函數的返回值作爲元素的權值大小

reverse -- 排序規則,reverse = True 降序, reverse = False 升序

#按轉換成字符串的長度排序
>>> aList.sort(key = lambda x:len(str(x)))   #lambda : 匿名函數 返回值爲表達式
>>> aList
[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]

列表排序

使用內置函數sorted()對列表進行排序並返回新列表

>>> aList
[9, 7, 6, 5, 4, 3, 17, 15, 13, 11]
>>> sorted(aList)                            #升序排序
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> sorted(aList,reverse = True)             #降序排序
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]

列表逆序

使用列表對象的reverse()方法將元素原地逆序

>>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> aList.reverse()
>>> aList
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]

序列操作的常用內置函數1

len(列表)返回列表中的元素個數,同樣適用於元組、字典、集合、字符串等

max(列表)min(列表)返回列表中的最大或最小元素,同樣適用於元組、字典、集合、range對象等

sum(列表)對列表的元素進行求和運算,對非數值型列表運算需要指定start參數,同樣適用於元組、range

>>> sum(range(1, 11))      #sum()函數的start參數默認爲0
55
>>> sum(range(1, 11), 5)   #指定start參數爲5,等價於5+sum(range(1,11))
60
>>> sum([[1, 2], [3], [4]], [])    #這個操作佔用空間較大,慎用
[1, 2, 3, 4]

序列操作常用內置函數2zip()

zip()函數返回可迭代的zip對象

>>> aList = [1, 2, 3]
>>> bList = [4, 5, 6]
>>> cList = zip(aList, bList)                 #返回zip對象
>>> cList
#<zip object at 0x0000000003728908>
>>> list(cList)                       #把zip對象轉換成列表
#[(1, 4), (2, 5), (3, 6)]

序列操作常用內置函數3: enumerate()

enumerate()函數用來枚舉可迭代對象中的元素,返回可迭代的enumerate枚舉對象,其中每個元素爲包含下標和值的元組。該函數對元組、字符串同樣有效

>>> for item in enumerate('abcdef'):
    print(item)
'''
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
(5, 'f')
'''

列表推導式

列表推導式使用非常簡潔的方式來快速生成滿足特定需求的列表,代碼具有非常強的可讀性

列表推導式語法形式爲

[expression for expr1 in sequence1 if condition1
            for expr2 in sequence2 if condition2
            for expr3 in sequence3 if condition3
            ...
            for exprN in sequenceN if conditionN]

列表推導式在內部實際上是一個循環結構,只是形式更加簡潔,例如:

>>> aList = [x*x for x in range(10)]

#等價於

>>> aList = []

>>> for x in range(10):

      aList.append(x*x)

使用列表推導式實現嵌套列表的平鋪

>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
#等價於
>>> vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> result = []
>>> for elem in vec:
    for num in elem:
  result.append(num)
>>> result
[1, 2, 3, 4, 5, 6, 7, 8, 9]

例題 

#使用random模塊,隨機生成一個每個數據元素都小於100且列表長度爲20的列表。並調整列表元素順序,把所有奇數都放到前面,偶數都放到後面。(注意:布爾類型可以比較大小)

>>>result = [random.randint(0,100) for i in range(20)]
>>>result.sort(key=lambda x:x%2==0,reverse = False)
>>>    print(result)






#aList = [-1,-4,6,7.5,-2.3,9,-11],採用列表推導式過濾掉負數並且將正數的值求平方組成一個列表。


>>>alist = [-1,-4,6,7.5,-2.3,9,-11]
>>>l=[i**2 for i in alist if i > 0]
>>>  print(l)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章