您的位置:首頁>正文

python3.5|小白入門基礎語法之資料結構、函數、反覆運算,確實簡潔

python語法確實簡潔, 其資料結構更有獨特之處。

附原始程式碼:

# 1 list清單=================================================

# list是一種有序的集合,可以隨時訪問、添加和刪除其中的元素

#

僅從操作方式上看,清單像是陣列和鏈表的綜合體。

# 除按索引訪問外,還支援插入、添加、刪除等操作,完全可當作佇列和棧使用。

# 如不考慮性能問題,清單似乎是一種易使用且功能完善的理想資料結構。

# 創建list

classmate = ['Mike','Bob','Tracy']

print(classmate)

#(#……代表print輸出)

#……['Mike', 'Bob', 'Tracy']

# 由於python是動態語言,所以list中包含的元素並不要求都必須是同一種資料類型

L = ['Mike',100,True]

print(L)

#……['Mike', 100, True]

# 按照索引訪問list

print(classmate[0])

#……Mike

# list還可以倒序訪問

print(classmate[-1])

#……Tracy

# 添加新元素

classmate.append('wwu')

print(classmate)

#……['Mike', 'Bob', 'Tracy', 'wwu']

# 插入新元素

classmate.insert(0,'zwu')

print(classmate)

#……['zwu', 'Mike', 'Bob', 'Tracy', 'wwu']

# 從list未尾刪除元素

classmate.pop()

print(classmate)

#……['zwu', 'Mike', 'Bob', 'Tracy']

# 從list指定位置刪除元素

classmate.pop(2)

print(classmate)

#……['zwu', 'Mike', 'Tracy']

#list中替換元素

classmate[1] = 'Lisa'

print(classmate)

#……['zwu', 'Lisa', 'Tracy']

#把一個list拼接成一個字串

print(' '.join(classmate))

#……zwu Lisa Tracy

#對list進行slice切片操作

# 也就是取list的部分資料,[start,end]

li = [0,1,2,3,4,5,6]

print(li[0:4])

#……[0, 1, 2, 3]

# li[0:4]可以簡寫成li[:4]

print(li[4:6])

#……[4, 5]

print(li[:])

#……[0, 1, 2, 3, 4, 5, 6]

# 切片操作還可以指定第三個參數

print(li[::2])

#……[0, 2, 4, 6]

# 第三個參數表示每N個取一個,上面的[::2]表示每兩個取一個,也就是隔一個取一個

# 倒序切片

print(li[-2:])

print(li[:-2])

#……[5, 6]

#……[0, 1, 2, 3, 4]

# 字串切片

# 字串 'xx' 和Unicode字串 u'xxx'也可以看成是一種list,每個元素就是一個字元

str = 'abcdefg'

print(str[:5])

#……abcde

# 2 tuple元組======================================================

# 元組是一個“唯讀”的list,創建後不能再修改

# 沒有append、insert、pop等list方法;

# 按索引訪問的方法與list是一樣的

Tclassmate = ('Mike','Bob','Tracy')

print(Tclassmate)

#……('Mike', 'Bob', 'Tracy')

print(Tclassmate[-1])

#……Tracy

# tuple內可以包含可變的list

t = (1,2,3,[4,5,6])

print(t)

#……(1, 2, 3, [4, 5, 6])

# tuple內的list物件可以通過t[3]拿到

tl = t[3]

print(tl)

#……[4, 5, 6]

tl[0]=40

print(t)

#……(1, 2, 3, [40, 5, 6])

# 3 迴圈與語句塊====================================================

# for語句

for name in classmate:

print(name)

#output:

'''

zwu

Lisa

Tracy

'''

# 上面迴圈語句後的冒號:表示語句塊的開始,相同的縮進表示一個語句塊

# 縮進統一用4個空格表示

# 如果你在交互環境下敲代碼,退出縮進需要多敲一行回車

# 4 dict字典====================================================

# list和tuple可用用來表示順序集合,如班裡的名字和考試成績的列表:

Ln = ['Adam','Lisa','Seldon']

Lc = [95,86,61]

# 如果要根據名字找到對應的成績,用兩個list表示就不是很方便

# python的dict就可以把名字和成績關聯起來,組成鍵值項

# dict的定義:{key:value,……}

d = {

'Adam':95,

'Lisa':86,

'Seldon':61

}

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61}

# 計算集合的大小

print(len(d))

#……3

# 訪問dict,不同於list和tuple使用索引,dict使用key訪問

print(d['Seldon'])

#……61

# 通過key訪問dict的value,只要key存在,dict就返回對應的value;

# 如果key不存在,會直接報錯:keyError

# 要避免keyError發生,有兩個方法:

# I 用in操作符判斷key是否存在

if 'Lisa' in d:

print(d['Lisa'])

# II 使用dict提供的一個get方法,在key不存在時,返回None

print(d.get('Seldon'))

#……61

print(d.get('wwu6'))

#……None

# dict的特點

# I 查找速度快,但佔用記憶體大;

# II 由於dict是按key查找的,所在在一個dict中,key不能重複;

# III 元素鍵值對key:value沒有順序;

# IV key不可變,不能用list作key,字串、整數、浮點數都行,當然list可以用作value;

# 更新dict

d['wwu'] = 66

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61, 'wwu': 66}

# 如果key存在,則賦值會用新的value代替原來的value

d['Seldon'] = 99

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}

# 遍歷dict

for key in d:

print(key)

#output:

'''

Adam

Lisa

Seldon

wwu

'''

# 5 set集合=================================================

# dict的作用是建立一組key和value的對應關係,dict的key是不能重複的;

# 有時候,我們只需要考慮key是否存在,這時set就派上用場了

# set持有一系列元素,這一點與list很像;

# 但是set的元素沒有重複,而且是無序的,這一點與dict的key很像

# 創建set,一般用list來創建set

s = set(classmate)

print(s)

#……{'zwu', 'Lisa', 'Tracy'}

# 求set大小

print(len(s))

#……3

# 遍歷set

for names in s:

print(names)

#output:

'''

zwu

Tracy

Lisa

'''

# 使用操作符in訪問set中的元素

print('Lisa' in s)

#……True

# set的特點

# I set的內部結構與dict很像,唯一的區別是不存儲value,因此,判斷一個元素是否在set中速度很快

# II set存儲的元素和dict的key類似,必須是不變物件;

# III set存儲的元素沒有順序;

# set應用

weekdaysS = ['Mon','Tue','Wed','Thu','Fri','Sat','sun']

weekdays = (weekdaysS)

x = 'Thu'

if x in weekdays:

bo = True

else:

bo = False

print(bo)

#……True

# 更新set之添加元素

s.add('wwu2')

print(s)

#……{'zwu', 'Lisa', 'Tracy', 'wwu2'}

# 如果添加的元素已經存在於set中,add()不會報錯,但也不會把元素添加進去

# 更新set之刪除元素

s.remove('wwu2')

print(s)

#……{'Tracy', 'zwu', 'Lisa'}

# 如果想要刪除的元素在set中不存在,remove()會報錯

#6 函數==========================

def power(x,n):

s = 1

while n>0:

n = n - 1

s = s * x

return s

print(power(2,10))

#……1024

# 函數也可以定義預設參數

def power(x,n = 2):

s = 1

while n>0:

n = n - 1

s = s * x

return s

print(power(100))

#……10000

# 可以返回多值

def op(a,b):

x = a + b

y = a - b

return x,y

print(op(9,7))

#……(16, 2)

i,j = op(9,7)

print(i,j)

#……16 2

# 遞迴函數

def fact(n):

if n==1:

return 1

return n * fact(n - 1)

print(fact(10))

#……3628800

# 定義可變參數

# 也就是函數可以接收任意多個參數

def fn(*args):

print(args)

print(fn(1,2,3))

#……(1, 2, 3)

#在可變參數函數中,變數args相當於一個tuple

def average(*args):

sum = 0;

i = 0;

for n in args:

sum = sum + n

i = i + 1

return sum/i

print(average(61,86,99))

#……82.0

# 7 有序集合的索引iteration反覆運算========================================

# 在python中,反覆運算是通過for……in來完成的

# in後的集合可以用在list、tuple、dict、set上,也可以用在其他任何可以反覆運算的物件上

# 反覆運算操作就是依次取出一個集合中的每一個元素,集合可以是無序或有序

# 索引反覆運算

for index, name in enumerate(s):

print(index, "-", name)

#output:

'''

0 - Tracy

1 - zwu

2 - Lisa

'''

# enumerate(s)把['Tracy', 'zwu', 'Lisa']變成了類似:

# [(0,'Tracy'),(1,'zwu'),(2,'Lisa')]

# 所以上面的反覆運算相當於以下結構

for t in enumerate(s):

index = t[0]

name = t[1]

print(index, "-", name)

#output:

'''

0 - Tracy

1 - zwu

2 - Lisa

'''

# 反覆運算dict的value

for v in d.values():

print(v)

#output:

'''

95

86

99

66

'''

# 反覆運算鍵值對

for v in d.items():

print(v)

#output:

'''

('Adam', 95)

('Lisa', 86)

('Seldon', 99)

('wwu', 66)

'''

# 在反覆運算的鍵值對取value

for v in d.items():

print(v[1])

#output:

'''

95

86

99

66

'''

#用反覆運算生成列表

lin = []

for x in range(1,11):

lin.append(x)

print(lin)

#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 把反覆運算放在運算式中

lin2 = [x for x in range(1,11)]

print(lin2)

#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#for迴圈反覆運算dic

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}

tds=['%s%s'%(name,score) for name, score in d.items()]

print('

')

print('

')

print(' '.join(tds))

print('

NameScore
')

#……

'''

NameScore
Adam95
Lisa86
Seldon99
wwu66

'''

# for迴圈和if判斷生成list

list2 = [x*x for x in range(1,11) if x % 2 == 0]

print(list2)

#……[4, 16, 36, 64, 100]

# 多層運算式

list3 = [m+n for m in 'ABC' for n in '123']

print(list3)

#……['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

#以上結構相當於:

list4 = []

for m in 'ABC':

for n in '123':

list4.append(m+n)

print(list4)

#……[' A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

# 把函數作為參數

def add(x,y,func):

return func(x) + func(y)

print(add(5,-8,abs))

#……13

# map()函數

list5 = [x for x in range(1,11)]

def funct(x):

return x*x

list6 = list(map(funct,list5))

print(list6)

#……[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# map函數依次接收清單的每個元素作為參數完成函數的計算,形成一個新的清單,

# 相當於一個函數清單,每個函數的參數是作為參數的清單的每個元素

# filter()函數

def isodd(x):

return x%2 == 1

list8 = list(filter(isodd,list5))

print(list8)

#……[1, 3, 5, 7, 9]

def isnotempty(s):

return s and len(s.strip()) > 0

str = list(filter(isnotempty,' this is a test '))

print(''.join(str))

# ……thisisatest

a = ' 123 '

print(a.strip())

#……123

# list排序函數

# python內置函數可對list進行排序

list0 = [36,5,12,9,21]

list2 = sorted(list0)

print(list2)

#……[5, 9, 12, 21, 36]

# list倒序排序

list3 = sorted(list0,reverse=True)

print(list3)

#……[36, 21, 12, 9, 5]

# sorted也支援對字串元素進行排序,預設按ASCII大小來比較

list4 = ['John','Henrry','zwu','Zyi','john']

list5 = sorted(list4)

print(list5)

#……['Henrry', 'John', 'Zyi', 'john', 'zwu']

-End-

附原始程式碼:

# 1 list清單=================================================

# list是一種有序的集合,可以隨時訪問、添加和刪除其中的元素

#

僅從操作方式上看,清單像是陣列和鏈表的綜合體。

# 除按索引訪問外,還支援插入、添加、刪除等操作,完全可當作佇列和棧使用。

# 如不考慮性能問題,清單似乎是一種易使用且功能完善的理想資料結構。

# 創建list

classmate = ['Mike','Bob','Tracy']

print(classmate)

#(#……代表print輸出)

#……['Mike', 'Bob', 'Tracy']

# 由於python是動態語言,所以list中包含的元素並不要求都必須是同一種資料類型

L = ['Mike',100,True]

print(L)

#……['Mike', 100, True]

# 按照索引訪問list

print(classmate[0])

#……Mike

# list還可以倒序訪問

print(classmate[-1])

#……Tracy

# 添加新元素

classmate.append('wwu')

print(classmate)

#……['Mike', 'Bob', 'Tracy', 'wwu']

# 插入新元素

classmate.insert(0,'zwu')

print(classmate)

#……['zwu', 'Mike', 'Bob', 'Tracy', 'wwu']

# 從list未尾刪除元素

classmate.pop()

print(classmate)

#……['zwu', 'Mike', 'Bob', 'Tracy']

# 從list指定位置刪除元素

classmate.pop(2)

print(classmate)

#……['zwu', 'Mike', 'Tracy']

#list中替換元素

classmate[1] = 'Lisa'

print(classmate)

#……['zwu', 'Lisa', 'Tracy']

#把一個list拼接成一個字串

print(' '.join(classmate))

#……zwu Lisa Tracy

#對list進行slice切片操作

# 也就是取list的部分資料,[start,end]

li = [0,1,2,3,4,5,6]

print(li[0:4])

#……[0, 1, 2, 3]

# li[0:4]可以簡寫成li[:4]

print(li[4:6])

#……[4, 5]

print(li[:])

#……[0, 1, 2, 3, 4, 5, 6]

# 切片操作還可以指定第三個參數

print(li[::2])

#……[0, 2, 4, 6]

# 第三個參數表示每N個取一個,上面的[::2]表示每兩個取一個,也就是隔一個取一個

# 倒序切片

print(li[-2:])

print(li[:-2])

#……[5, 6]

#……[0, 1, 2, 3, 4]

# 字串切片

# 字串 'xx' 和Unicode字串 u'xxx'也可以看成是一種list,每個元素就是一個字元

str = 'abcdefg'

print(str[:5])

#……abcde

# 2 tuple元組======================================================

# 元組是一個“唯讀”的list,創建後不能再修改

# 沒有append、insert、pop等list方法;

# 按索引訪問的方法與list是一樣的

Tclassmate = ('Mike','Bob','Tracy')

print(Tclassmate)

#……('Mike', 'Bob', 'Tracy')

print(Tclassmate[-1])

#……Tracy

# tuple內可以包含可變的list

t = (1,2,3,[4,5,6])

print(t)

#……(1, 2, 3, [4, 5, 6])

# tuple內的list物件可以通過t[3]拿到

tl = t[3]

print(tl)

#……[4, 5, 6]

tl[0]=40

print(t)

#……(1, 2, 3, [40, 5, 6])

# 3 迴圈與語句塊====================================================

# for語句

for name in classmate:

print(name)

#output:

'''

zwu

Lisa

Tracy

'''

# 上面迴圈語句後的冒號:表示語句塊的開始,相同的縮進表示一個語句塊

# 縮進統一用4個空格表示

# 如果你在交互環境下敲代碼,退出縮進需要多敲一行回車

# 4 dict字典====================================================

# list和tuple可用用來表示順序集合,如班裡的名字和考試成績的列表:

Ln = ['Adam','Lisa','Seldon']

Lc = [95,86,61]

# 如果要根據名字找到對應的成績,用兩個list表示就不是很方便

# python的dict就可以把名字和成績關聯起來,組成鍵值項

# dict的定義:{key:value,……}

d = {

'Adam':95,

'Lisa':86,

'Seldon':61

}

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61}

# 計算集合的大小

print(len(d))

#……3

# 訪問dict,不同於list和tuple使用索引,dict使用key訪問

print(d['Seldon'])

#……61

# 通過key訪問dict的value,只要key存在,dict就返回對應的value;

# 如果key不存在,會直接報錯:keyError

# 要避免keyError發生,有兩個方法:

# I 用in操作符判斷key是否存在

if 'Lisa' in d:

print(d['Lisa'])

# II 使用dict提供的一個get方法,在key不存在時,返回None

print(d.get('Seldon'))

#……61

print(d.get('wwu6'))

#……None

# dict的特點

# I 查找速度快,但佔用記憶體大;

# II 由於dict是按key查找的,所在在一個dict中,key不能重複;

# III 元素鍵值對key:value沒有順序;

# IV key不可變,不能用list作key,字串、整數、浮點數都行,當然list可以用作value;

# 更新dict

d['wwu'] = 66

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 61, 'wwu': 66}

# 如果key存在,則賦值會用新的value代替原來的value

d['Seldon'] = 99

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}

# 遍歷dict

for key in d:

print(key)

#output:

'''

Adam

Lisa

Seldon

wwu

'''

# 5 set集合=================================================

# dict的作用是建立一組key和value的對應關係,dict的key是不能重複的;

# 有時候,我們只需要考慮key是否存在,這時set就派上用場了

# set持有一系列元素,這一點與list很像;

# 但是set的元素沒有重複,而且是無序的,這一點與dict的key很像

# 創建set,一般用list來創建set

s = set(classmate)

print(s)

#……{'zwu', 'Lisa', 'Tracy'}

# 求set大小

print(len(s))

#……3

# 遍歷set

for names in s:

print(names)

#output:

'''

zwu

Tracy

Lisa

'''

# 使用操作符in訪問set中的元素

print('Lisa' in s)

#……True

# set的特點

# I set的內部結構與dict很像,唯一的區別是不存儲value,因此,判斷一個元素是否在set中速度很快

# II set存儲的元素和dict的key類似,必須是不變物件;

# III set存儲的元素沒有順序;

# set應用

weekdaysS = ['Mon','Tue','Wed','Thu','Fri','Sat','sun']

weekdays = (weekdaysS)

x = 'Thu'

if x in weekdays:

bo = True

else:

bo = False

print(bo)

#……True

# 更新set之添加元素

s.add('wwu2')

print(s)

#……{'zwu', 'Lisa', 'Tracy', 'wwu2'}

# 如果添加的元素已經存在於set中,add()不會報錯,但也不會把元素添加進去

# 更新set之刪除元素

s.remove('wwu2')

print(s)

#……{'Tracy', 'zwu', 'Lisa'}

# 如果想要刪除的元素在set中不存在,remove()會報錯

#6 函數==========================

def power(x,n):

s = 1

while n>0:

n = n - 1

s = s * x

return s

print(power(2,10))

#……1024

# 函數也可以定義預設參數

def power(x,n = 2):

s = 1

while n>0:

n = n - 1

s = s * x

return s

print(power(100))

#……10000

# 可以返回多值

def op(a,b):

x = a + b

y = a - b

return x,y

print(op(9,7))

#……(16, 2)

i,j = op(9,7)

print(i,j)

#……16 2

# 遞迴函數

def fact(n):

if n==1:

return 1

return n * fact(n - 1)

print(fact(10))

#……3628800

# 定義可變參數

# 也就是函數可以接收任意多個參數

def fn(*args):

print(args)

print(fn(1,2,3))

#……(1, 2, 3)

#在可變參數函數中,變數args相當於一個tuple

def average(*args):

sum = 0;

i = 0;

for n in args:

sum = sum + n

i = i + 1

return sum/i

print(average(61,86,99))

#……82.0

# 7 有序集合的索引iteration反覆運算========================================

# 在python中,反覆運算是通過for……in來完成的

# in後的集合可以用在list、tuple、dict、set上,也可以用在其他任何可以反覆運算的物件上

# 反覆運算操作就是依次取出一個集合中的每一個元素,集合可以是無序或有序

# 索引反覆運算

for index, name in enumerate(s):

print(index, "-", name)

#output:

'''

0 - Tracy

1 - zwu

2 - Lisa

'''

# enumerate(s)把['Tracy', 'zwu', 'Lisa']變成了類似:

# [(0,'Tracy'),(1,'zwu'),(2,'Lisa')]

# 所以上面的反覆運算相當於以下結構

for t in enumerate(s):

index = t[0]

name = t[1]

print(index, "-", name)

#output:

'''

0 - Tracy

1 - zwu

2 - Lisa

'''

# 反覆運算dict的value

for v in d.values():

print(v)

#output:

'''

95

86

99

66

'''

# 反覆運算鍵值對

for v in d.items():

print(v)

#output:

'''

('Adam', 95)

('Lisa', 86)

('Seldon', 99)

('wwu', 66)

'''

# 在反覆運算的鍵值對取value

for v in d.items():

print(v[1])

#output:

'''

95

86

99

66

'''

#用反覆運算生成列表

lin = []

for x in range(1,11):

lin.append(x)

print(lin)

#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 把反覆運算放在運算式中

lin2 = [x for x in range(1,11)]

print(lin2)

#……[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#for迴圈反覆運算dic

print(d)

#……{'Adam': 95, 'Lisa': 86, 'Seldon': 99, 'wwu': 66}

tds=['%s%s'%(name,score) for name, score in d.items()]

print('

')

print('

')

print(' '.join(tds))

print('

NameScore
')

#……

'''

NameScore
Adam95
Lisa86
Seldon99
wwu66

'''

# for迴圈和if判斷生成list

list2 = [x*x for x in range(1,11) if x % 2 == 0]

print(list2)

#……[4, 16, 36, 64, 100]

# 多層運算式

list3 = [m+n for m in 'ABC' for n in '123']

print(list3)

#……['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

#以上結構相當於:

list4 = []

for m in 'ABC':

for n in '123':

list4.append(m+n)

print(list4)

#……[' A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

# 把函數作為參數

def add(x,y,func):

return func(x) + func(y)

print(add(5,-8,abs))

#……13

# map()函數

list5 = [x for x in range(1,11)]

def funct(x):

return x*x

list6 = list(map(funct,list5))

print(list6)

#……[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# map函數依次接收清單的每個元素作為參數完成函數的計算,形成一個新的清單,

# 相當於一個函數清單,每個函數的參數是作為參數的清單的每個元素

# filter()函數

def isodd(x):

return x%2 == 1

list8 = list(filter(isodd,list5))

print(list8)

#……[1, 3, 5, 7, 9]

def isnotempty(s):

return s and len(s.strip()) > 0

str = list(filter(isnotempty,' this is a test '))

print(''.join(str))

# ……thisisatest

a = ' 123 '

print(a.strip())

#……123

# list排序函數

# python內置函數可對list進行排序

list0 = [36,5,12,9,21]

list2 = sorted(list0)

print(list2)

#……[5, 9, 12, 21, 36]

# list倒序排序

list3 = sorted(list0,reverse=True)

print(list3)

#……[36, 21, 12, 9, 5]

# sorted也支援對字串元素進行排序,預設按ASCII大小來比較

list4 = ['John','Henrry','zwu','Zyi','john']

list5 = sorted(list4)

print(list5)

#……['Henrry', 'John', 'Zyi', 'john', 'zwu']

-End-

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示