python學習-字符串、列表、元組、字典、集合

一、字符串

(一)字符串的介紹

  • 簡單的字符串:雙引號或者單引號之間的數據,就是字符串
print("Let's go")
print("Let\'s go")   # \'用來轉意
  • 原始字符串:
str1 = "C:\naaa\nbbb\nccc"
print(str1)      # 想打印出目錄,\n默認爲換行
str1 = r"C:\naaa\nbbb\nccc"
print(str1)      # 前面加一個R能起到打印字符串的作用  

(二)字符串的下標索引和切片

  • 字符串索引、替換
str1 = "abcdef"
print(str1[0])   #打印出第一個字符
print(str1[2])
# 將字符串中的'a'改爲0
str1[0] = "0"    #不能直接用下表替換,會報錯。
print(str1)
# 只能用replace替換,replace(str1,str2)將字符類型的str2替換成str1
print(str1.replace("a","0"))
print(str1)      #原字符串不變
  • 符串的切片
str1 = '1234567890'
# 截取字符串最後三位的字符
print(str1[7:])
print(str1[-3:])     #爲設定步進的時候,步進默認爲1,從左往右
# 截取字符串的全部字符
print(str1[:])F
# 截取字符串的倒數第一個字符
print(str1[-1])
# 截取與原字符串順序相反的字符串
print(str1[::-1])         #快速將字符串逆置
# 截取字符串倒數第三位與倒數第一位之前的字符
print(str1[-3:-1])
# 截取086。
print(str1[:4:-2])
當[a:b:c]   當a決定C  

(三)字符串的查找與檢查(find(), index(),count())

str1 = "you are my firends"
# find() 檢查字符串是否包含在str1中,如果在返回開始索引值,否則返回-1
print(str1.find("are"))            # a = 4   返回值需要賦給變量名
# index() 和find()一樣,只不過會報錯
# count(str,start,end) 返回字符串在開始和結尾之間在st1中出現的次數
print(str1.count("e"))    #如果沒設置開始和結尾則默認真個字符串中
print(str1.count("e",7,12)) #如果去掉12則默認爲7到字符串末端
# rfind()      #從右邊開始查找,在查找文件的後綴時可以用
# rindex()   #從右邊開始索引

(四)字符串的判斷

str1 = "we are friends"
# isalpha() 如果str1中所有字符都是字母,返回True
print(str1.isalpha())       #False  因爲有空格
# isdigit() 如果str1中所有字符都是數字,返回True
# isalnum() 如果str1中所有字符是數字或者字母,返回True
# isspace() 如果str1中所有字符都是空格,返回True
# startswith(we) 檢查we是否在字符串str1中以開頭出現,返回bool
# endswith(friends) 檢查friends是否在字符串str1中以結尾出現,返回bool

(五)字符串修改

str1 = "we are friends"
# split(str,a) 以str爲分隔符切片str1,如果a有指定值,則僅分割a個子字符串
# splitlines()  按照行分隔符,返回一個包含各元素的列表
# capitalize() 把t字符串第一個字符大寫
# title()  把字符串的每個單詞首字母大寫"We Are Friends"
# lower()  把所有字符串的大寫字符小寫
# upper()  把字符串所有小寫字母大寫
# ljust(width)  返回一個原字符串左對齊,使用空格填充至長度width的新字符串
# rjust(width)  返回一個原字符串右對齊,使用空格填充至長度width的新字符串
# center(width) 返回一個原字符串居中,並使用空格填充至長度width的新字符串
# lstrip()  刪除str1左邊的空格
# rstrip()  刪除str1右邊的空格
# strip()  刪除str1兩端的空格
# partition(str)  將str1分割成爲前中後三部分
# rpartition(str)  從右開始將str1分割成爲前中後三部分
# join(list)    str1每個元素後面插入str2構造成一個新的字符串
str2 = "_"    將列表中的字符串一“ ”方式寫成新的字符串
print(str2.join(str1))
  •  

二、列表

(一)列表的特點和創建

1、可以對不同類型數據儲存,但是要避免儲存多種數據類型 
list1 = [1,2,”曹哲”,(1,2,3,4)] list1 = [] 
2、和str一樣可以索引和切片 
索引出list1中的4:list1[3][3] 
3、迭代。for i in list1:: 
print(i) 
4、renge(10) 
5、列表和普通變量的區別:列表是數據類型,普通列表是用來存儲數據的,可以把列表複製給普通變量。 
6、列表的缺點:①在頭部或者其他部分添加元素,效率比較低。 
②根據某個特徵查找元素,效率非常低。 
字典能滿足他!!! 
7、列表不能作爲字典和集合的元素。。。

(二)列表添加元素

list1 = [1,2,3,4]
#### insert(index,object)  在指定位置index前插入元素object.
list1.insert(2,5)
#### 列表是可變的,所以插入後還是返回原列表
print(list1)
## append() 再末尾追加一個任何類型的數據
list1.append([1,2,3,4])
print(list1)
## extend()  在列表末尾追加數據,如果是列表或元祖,拆分後將追加到列表裏
list1.extend((6,7))  # extend()中的元素必須爲可迭代對象
print(list1)

(三)列表修改和刪除元素

list1 = [1,2,3,4,[5,6,7],8]
# 修改,根據元素下標直接賦新值,如果不知道下標,用index()索引獲得
list1[4][2] = 0         #打印list1
list1[list1.index(4)] = 10               #打印list1
# remove()  刪除列表內指定的數據  
list1.remove(2)         #打印list1
# pop()  刪除列表中指定的下標的數據,並返回該數據,(如果沒有參數,則默認最後的數據)
print(list1.pop())      #打印list1
# clear() 清除列表所有數據,但不刪除列表。
list1.clear()           # 打印list1
# del Python提供的刪除方式,可以刪除任何數據
del list1

(四)查找列表元素

list1 = [1,2,3,4,[5,6,7],8]
# in 和 not in 判斷元素是否存在列表,字符串,元組裏
# index(元素,開始,結束)  返回列表裏指定元素的下標(如果沒有,報錯)
print(list1.index(3,1,4))
# count(元素,開始,結束)  返回列表裏指定元素個數

(五)列表排序和倒置

list1 = [1,3,2,4,0]
# sort()  Python列表提供的方法,在原列表上排序,Python2支持混合列表排序,3只支持統一類型排序
list1.sort()         #打印list1
# sorted()  BIF Python提供的方法,返回新列表,原列表不變
print(sorted(list1))
# reverse()  將列表倒置。
list1.reverse()        #打印list1
# sorted(list1,reverse = True)     #返回一個新的列表
print(sorted(list1,reverse = True))
list2 = list(reversed(sorted(list1)))

(六)列表的拷貝

list1 = [1,3,2,4,0]
# 引用  (淺拷貝):只是增加了一個原數據的引用,地址不變
list2 = list1                 #他們的地址一樣。
if id(list2) == id(list1):    #若改變list2,也改變list1。沒有真正實現拷貝
    print("淺拷貝")
# copy()深拷貝  拷貝一個分數據給新列表,和原列表沒有任何關係
list2 = list1.copy()    #打印list2
# 用切片的方式複製(相當於copy.deepcopy())
list2 = list1[:]

(七)列表推倒式

# 將一段代碼寫成推倒式
list2 = []
for i in range(1,21):
    if i % 2 == 0:
        list2.append(i)
print(list2)
# 在表達式中for遍歷一般與if一起用
# 先執行for 循環。
list1 = [i for i in range(1,21) if i % 2 == 0]
print(list1)
# 如果返回值和沒有遍歷值:生成10個“666”的列表
# list3 = ["666" for i in range(0,10)]
# i 只是起到遍歷,沒有起到判斷值或者返回值的作用,可以用下劃線代替
list3 = ["666" for _ in range(0,10)]
print(list3)

(八)列表的常用技巧

  • 列表合併:
list1 = [1,2,3,4]
list2 = [5,6,7,8]
# 返回一個新列表list3
list3 = list1 + list2    #print(list3)
# 如果是用list1 += list2 在原列表追加,不生成新列表(列表可變)
list1 += list2           #print(list1)
  • 將字符串轉列表:
mystr = "we are friends"
# 可以用split()先將mystr分割成三個字符串的列表
print(mystr.split(" "))
# 如果直接用list強制轉換,則會使得每一個字符成爲一個列表元素
print(list(mystr))
  • 將列表轉爲字符串:
list1 = ['we', 'are', 'friends']
# " ".join()    把誰誰誰加入到(list)
print(" ".join(list1))   #只能轉列表的每一個元素都爲字符串
list2 = [10,20,30]
# 那麼如何將list2轉爲字符串?
# 首先應該先將list2中的每個元素轉爲字符型,返回成列表,再進行轉化
print(" ".join([str(i) for i in list2]))
  • 內置函數(BIF):
list1 = [10,20,30,40]
# isinstance()  內置函數,判斷對象是否爲指定類型,返回True
if isinstance(list1,list):
    print("list1是列表")
if isinstance(list1[1],int):
    print("列表中第二個元素是整形")
# enumerate(列表,元祖,字符串等)   獲取列表的元素下標和元素,返回一個列表
list(enumerate(list1)) 
for x,y in enumerate(list1):
    print(x,y) 

(九)列表的嵌套及應用

# 一個學校,有3個辦公室,現在有8位老師等待工位的分配,請編寫程序,完成隨機的分配
import random;
offices = [[],[],[]]          #   三個辦公室
names = ["A","B","C","D","E","F","G","H"]     
# 8位老師
# 現在我們要定一個教室的隨機分配,一次提取names中的元素放入到教室裏
for name in names:
    index = random.randint(0,2)
    offices[index].append(name)
i = 1
for tempName in offices:
    print("第%d個教室有%d名老師。"%(i,len(tempName)))
    i += 1

三、元組

(一)元組的特點

   **元祖不可以更改,用(,)表示**

(二)元祖的創建、查詢與統計

# range()  創建元組
a = tuple(range(10,20,2))
print(a)
# 讀取元組下標,找到元組元素
print(a[1])
# index() 返回值指定元素的下標(如果沒有,報錯)
print(a.index(12))
# count() 統計指定元素個數
print(a.count(12))

四、字典

(一)字典的基本使用

 字典查找要比列表速度快,字典和元素個數沒關係。    
# ①設計字典,鍵一般用字符串表示。
#   字典是由鍵值對和花括號組成
#   字典的每個元素由2部分組成,鍵:值。
#   字典沒有牽引,不能通過下標取值,只能通過鍵名來取值
num_dict = {"name":"python","age":36,"id":10}
print(num_dict["name"])

# ②創建字典
num_dict = {}
a = num_dict.fromkeys("abcd",10)
####{'a': 10, 'b': 10, 'c': 10, 'd': 10}

# ③長度
print(len(a))   #   4 

(二)字典修改元素和數據添加

# ①根據鍵名修改元素
name_dict = {}
name_dict["name"] = "python"  #如果字典裏沒有鍵,則創建這對鍵值
print(name_dict)              #{'name': 'python'}
name_dict["name"] = "lihua"   #如果字典裏有這個鍵,改變這個鍵的值
print(name_dict)              #{'name': 'lihua'}

# ②setdefault()
name_dict = {"name":2}
name_dict.setdefault("name")  #如果鍵不在字典裏,則返回默認值NONE,並創建
print(name_dict)              #{'name': None}
name_dict.setdefault("name",1)  #如果鍵不在字典裏,則返回默認值1,並創建這對鍵值
print(name_dict)                #{'name': 1}
print(name_dict.setdefault("name")) #如果鍵在字典裏,則返回值Value

# get() 和setdefault基本一樣。不同的是get()不會添加鍵值對
info = {'name': '班長', 'id': 100, 'sex': 'f'}
print(info.get("tess"))      #如果沒有這個鍵,則返回None
print(info)                  #沒有將返回的鍵值添加到info裏
# ③keys()  返回這個字典所有鍵的列表
info = {'name': '班長', 'id': 100, 'sex': 'f'}
print(info.keys())        # dict_keys(['name', 'id', 'sex'])

# ④values()  返回這個字典所有值的列表
print(info.values())      # dict_values(['班長', 100, 'f'])

# ⑤items()   返回這個字典所有鍵值對(元祖)的列表
print(info.items())       #dict_items([('name', '班長'), ('id', 100), ('sex', 'f')])

(三)字典拷貝,更新與刪除

# ①copy()   拷貝
info = {'name': '班長', 'id': 100, 'sex': 'f'}   #對象id發生變化
print(info.copy())        #   {'name': '班長', 'id': 100, 'sex': 'f'}

# update()  字典更新,替換成新增
info_dict = {"name":"python","age":14}
new_info_dict = {"name":"hello","id":123,"age":1233}
info_dict.update(new_info_dict)     # 跟新new_info_dict到info_dict..
print(info_dict)

# ②pop() 參數是鍵,刪除指定的鍵值對,並返回值
print(info.pop("name"))    # 班長
print(info.pop("sss"))     # 報錯

# ③popitem() 依次從後向前刪除鍵值對,並返回這個鍵值對的元組
print(info.popitem())         # 刪除的返回值('sex', 'f')

# ④clear() 清空字典
# ⑤del(info)  刪除字典

(四)字典推導式

# # 類似於列表,只是用花括號,返回的參數爲鍵值對。
new_dict = {i : i**2 for i in range(1,5)}
print(new_dict)        #  {1: 1, 2: 4, 3: 9, 4: 16}

# # 將兩個列表合併爲字典
list1 = ["name","age","id"]
      list2 = [4,5,6]     #怎麼拿出"name"
new_dict = {list1[i]:list2[i] for i in range(len(list1))}
print(new_dict)     #{'name': 4, 'age': 5, 'id': 6}

# # 將一個字典轉換爲列表。
new_dict = {"name":"python","old":1}
list1 = []
      for key in new_dict.keys():
     list1.append(key)
for value in new_dict.values():
     list1.append(value)

# 字典鍵值對互相轉換
new_dict = {"name":"python","old":1}
print({value : key for key,value in new_dict.items()})

(五)字典補充

在python2中dict.has_key(key)用來判斷dict中是否存在鍵key(python2中)。返回True。 
python2中 dict.keys或者dict.items,dict.values 返回的是列表。而python3返回的是dict_keys([‘yellow’, ‘red’, ‘green’])

五、集合

(一)集合的創建和特點

# ①集合、列表、元組可以互相轉換
# ②集合中的數據都是唯一的,去重的最快方式是集合
new_set = {1,2,3,4,3,2,4,5}
print(new_set)      #{1, 2, 3, 4, 5}   自動排重
# ③如果需要,一般集合會轉列表做複雜的操作,再轉爲集合
# ④創建一個空集合
new_set = set()

(二)集合添加數據,刪除數據

# add()  向集合裏添加一個元素
new_set = {1,2,3,4,5}
new_set.add(6)
#####字典結合都是無序的,不能索引,集合本身不能排序,如果想排序需轉成列表方式

# update()  向集合中添加多個數據,參數是一個列表
new_set = {1,2,3,4,5}
new_set.update([1,2,5,6])    #{1, 2, 3, 4, 5, 6}

# remove() 刪除指定的數據,數據不存在則把報錯
# discard() 本意有拋棄的意思 刪除指定數據,數據不存在則不做任何操作
#  pop()   無參數默認,則從前往後依次摘除
new_set = {1,2,3,4,5}
print(new_set.pop())

(三)集合的數學運算

#  交集
a = {1,2,3,4}
b = {2,3,4,5}
print(a & b)       #  {2, 3, 4}

# 並集
print(a | b)       #  {1, 2, 3, 4, 5}

# 差集
print(a - b)       # a - b  剩下a有b沒的  {1}
print(b - a)       # b - a  剩下b有a沒的  {5}

# 對稱差集
print(b ^ a)       #  {1, 5}

# b是否是a的子集
b <= a

# a是否是b的子集
b >= a

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