Python3 與 C# 基礎語法對比(基礎知識場):https://www.cnblogs.com/dunitian/p/9103673.html Python3 與 C# 基礎語法對比(String專欄):https://www.cnblogs.com/dunitian/p/9119986.ht ...
Python3 與 C# 基礎語法對比(基礎知識場):https://www.cnblogs.com/dunitian/p/9103673.html
Python3 與 C# 基礎語法對比(String專欄):https://www.cnblogs.com/dunitian/p/9119986.html
彩色最新版:https://www.cnblogs.com/dotnetcrazy/p/9155310.html
今天說說List和Tuple以及Dict。POP部分還有一些如Func、IO(也可以放OOP部分說)然後就說說面向對象吧。
先吐槽一下:Python面向對象真心需要規範,不然太容易走火入魔了 -_-!!! 汗,下次再說。。。
對比寫作真的比單寫累很多,希望大家多捧捧場 ^_^
步入正題:
1.列表相關:
Python定義一個列表(列表雖然可以存不同類型,一般我們把相同類型的值存列表裡面,不同類型存字典里(key,value)) info_list=[] #空列表 infos_list=["C#","JavaScript"]遍歷和之前一樣,for 或者 while 都可以(for擴展:https://www.cnblogs.com/dotnetcrazy/p/9102030.html#forelse)
NetCore:var infos_list = new List<object>() { "C#", "JavaScript" };
遍歷可以用foreach,for,while
Python列表的添加:
# 末尾追加 infos_list.append("Java") # 添加一個列表 infos_list.extend(infos_list2) # 指定位置插入 infos_list.insert(0,"Python") # 插入列表:infos_list.insert(0,temp_list) 看後面的列表嵌套,是通過下標方式獲取,eg: infos_list[0][1]Python在指定位置插入列表是真的插入一個列表進去,C#是把裡面的元素挨個插入進去
NetCore:Add,AddRange,Insert,InsertRange (和Python插入列表有些區別)
Python列表刪除系列:
infos_list.pop() #刪除最後一個 infos_list.pop(0) #刪除指定索引,不存在就報錯 infos_list.remove("張三") # remove("")刪除指定元素,不存在就報錯 del infos_list[1] #刪除指定下標元素,不存在就報錯 del infos_list #刪除集合(集合再訪問就不存在了)不同於C#給集合賦null再過一遍
NetCore:移除指定索引:infos_list.RemoveAt(1); 移除指定值: infos_list.Remove(item); 清空列表: infos_list.Clear();
Python修改:(只能通過索引修改)
infos_list2[1]="PHP" #只有下標修改一種方式,不存在則異常 # 想按值修改需要先查下標再修改 eg: infos_list2.index("張三") infos_list2[0]="GO" # infos_list2.index("dnt")#不存在則異常 # 知識面拓展:https://www.zhihu.com/question/49098374 # 為什麼python中不建議在for迴圈中修改列表? # 由於在遍歷的過程中,刪除了其中一個元素,導致後面的元素整體前移,導致有個元素成了漏網之魚。 # 同樣的,在遍歷過程中,使用插入操作,也會導致類似的錯誤。這也就是問題里說的無法“跟蹤”元素。 # 如果使用while,則可以在面對這樣情況的時候靈活應對。NetCore:基本上和Python一樣
Python查詢系列:in, not in, index, count
if "張三" in names_list: names_list.remove("張三") if "大舅子" not in names_list: names_list.append("大舅子") names_list.index("王二麻子") names_list.count("逆天")NetCore:IndexOf , Count
查找用Contains,其他的先看看,後面會講
Python排序
num_list.reverse() # 倒序 num_list.sort() # 從小到大排序 num_list.sort(reverse=True) # 從大到小列表嵌套,獲取用下標的方式:num_list[5][1]
NetCore:var num_list2 = new List<object>() { 33, 44, 22,new List<object>(){11,55,77} };
不能像python那樣下標操作,可以定義多維數組來支持 num_list2[i][j] (PS,其實這個嵌套不太用,以後都是列表裡面套Dict,類似與Json)
2.Tuple 元組
3.Dict系列這次先說NetCore吧:(逆天ValueTuple用的比較多,下麵案例就是用的這個)
元組系:https://msdn.microsoft.com/zh-cn/library/system.tuple.aspx 值元組:https://msdn.microsoft.com/zh-cn/library/system.valuetuple.aspx C#中元組主要是方便程式員,不用自然可以。比如:當你返回多個值是否還用ref out 或者返回一個list之類的? 這些都需要先定義,比較麻煩.元祖在這些場景用的比較多。先說說基本使用: 初始化:var test_tuple = ("萌萌噠", 1, 3, 5, "加息", "加息"); //這種方式就是valueTuple了(看vscode監視信息) 需要說下的是,取值只能通過itemxxx來取了,然後就是valueTuple的值是可以修改的 忽略上面說的(一般不會用的),直接進應用場景: 就說到這了,代碼部分附錄是有的 Python:用法基本上和列表差不多 定義:一個元素:test_tuple1=(1,) test_tuple=("萌萌噠",1,3,5,"加息","加息") test_tuple.count("加息") test_tuple.index("萌萌噠") #沒有find方法 test_tuple.index("加息", 1, 4) #從特定位置查找,左閉右開區間==>[1,4) 來說說拆包相關的,C#的上面說了,這邊來個案例即可: a=(1,2) b=a #把a的引用給b c,d=a #不是把a分別賦值給c和d,等價於:c=a[0] d=a[1]
Python遍歷相關:
#每一次相當於取一個元組,那可以用之前講的例子來簡化了:c,d=a #等價於:c=a[0] d=a[1]
for k,v in infos_dict.items(): print("Key:%s,Value:%s"%(k,v))
NetCore:方式和Python差不多
foreach (KeyValuePair<string, object> kv in infos_dict) { Console.WriteLine($"Key:{kv.Key},Value:{kv.Value}"); }
Python增刪改系列:
增加、修改:infos_dict["wechat"]="dotnetcrazy" #有就修改,沒就添加
刪除系列:
# 刪除 del infos_dict["name"] #不存在就報錯 #清空字典內容 infos_dict.clear() # 刪除字典 del infos_dictNetCore:
添加:infos_dict.Add("wechat", "lll"); infos_dict["wechat1"] = "lll"; 修改: infos_dict["wechat"] = "dotnetcrazy"; 刪除: infos_dict.Remove("dog"); //不存在不報錯 infos_dict.Clear(); //列表內容清空
Python查詢系列:推薦:infos_dict.get("mmd") #查不到不會異常
NetCore:infos_dict["name"] 可以通過 ContainsKey(key) 避免異常。看值就 ContainsValue(value)
附錄Code:
Python List:
View CodePython Tuple:
View CodePython Dict:
View Code
NetCore List:
View CodeNetCore Tuple:
View CodeNetCore Dict:
View Code