欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

程序员文章站 2022-06-22 16:19:05
Python3 与 C# 基础语法对比(基础知识场):https://www.cnblogs.com/dunitian/p/9103673.html Python3 与 C# 基础语法对比(String专栏):https://www.cnblogs.com/dunitian/p/9119986.ht ......

Python3 与 C# 基础语法对比(基础知识场):

Python3 与 C# 基础语法对比(String专栏):

彩色最新版:

今天说说List和Tuple以及Dict。POP部分还有一些如Func、IO(也可以放OOP部分说)然后就说说面向对象吧。

先吐槽一下:Python面向对象真心需要规范,不然太容易走火入魔了 -_-!!! 汗,下次再说。。。

对比写作真的比单写累很多,希望大家多捧捧场 ^_^

步入正题:


 

1.列表相关:

Python定义一个列表(列表虽然可以存不同类型,一般我们把相同类型的值存列表里面,不同类型存字典里(key,value))
info_list=[] #空列表
infos_list=["C#","JavaScript"]

遍历和之前一样,for 或者 while 都可以(for扩展:)

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

NetCorevar infos_list = new List<object>() { "C#", "JavaScript" };

遍历可以用foreach,for,while

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)


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]

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

Python在指定位置插入列表是真的插入一个列表进去,C#是把里面的元素挨个插入进去

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

NetCore:Add,AddRange,Insert,InsertRange (和Python插入列表有些区别)

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)


Python列表删除系列

infos_list.pop() #删除最后一个
infos_list.pop(0) #删除指定索引,不存在就报错
infos_list.remove("张三") # remove("")删除指定元素,不存在就报错

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

del infos_list[1] #删除指定下标元素,不存在就报错
del infos_list #删除集合(集合再访问就不存在了)不同于C#给集合赋null

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

再过一遍Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

NetCore移除指定索引:infos_list.RemoveAt(1); 移除指定值: infos_list.Remove(item); 清空列表: infos_list.Clear();

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)


Python修改:(只能通过索引修改)

infos_list2[1]="PHP" #只有下标修改一种方式,不存在则异常
# 想按值修改需要先查下标再修改 eg:
infos_list2.index("张三")
infos_list2[0]="GO"
# infos_list2.index("dnt")#不存在则异常

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

# 知识面拓展:
# 为什么python中不建议在for循环中修改列表?
# 由于在遍历的过程中,删除了其中一个元素,导致后面的元素整体前移,导致有个元素成了漏网之鱼。
# 同样的,在遍历过程中,使用插入操作,也会导致类似的错误。这也就是问题里说的无法“跟踪”元素。
# 如果使用while,则可以在面对这样情况的时候灵活应对。

NetCore:基本上和Python一样

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)


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("逆天")

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

NetCoreIndexOf , Count

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

查找用Contains,其他的先看看,后面会讲

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)


Python排序 

num_list.reverse() # 倒序
num_list.sort() # 从小到大排序
num_list.sort(reverse=True) 从大到小

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

列表嵌套,获取用下标的方式:num_list[5][1]

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

NetCorevar num_list2 = new List<object>() { 33, 44, 22,new List<object>(){11,55,77} };

不能像python那样下标操作,可以定义多维数组来支持 num_list2[i][j] (PS,其实这个嵌套不太用,以后都是列表里面套Dict,类似与Json)

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

2.Tuple 元组

这次先说NetCore吧:(逆天ValueTuple用的比较多,下面案例就是用的这个)

元组系:
值元组:
 
C#中元组主要是方便程序员,不用自然可以。比如:当你返回多个值是否还用ref out 或者返回一个list之类的? 这些都需要先定义,比较麻烦.元祖在这些场景用的比较多。先说说基本使用:
 
初始化:var test_tuple = ("萌萌哒", 1, 3, 5, "加息", "加息"); //这种方式就是valueTuple了(看vscode监视信息)
Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)
需要说下的是,取值只能通过itemxxx来取了,然后就是valueTuple的值是可以修改的
Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)
忽略上面说的(一般不会用的),直接进应用场景:
Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)
就说到这了,代码部分附录是有的
 
Python:用法基本上和列表差不多
定义:一个元素:test_tuple1=(1,)
 
test_tuple=("萌萌哒",1,3,5,"加息","加息")
test_tuple.count("加息")
test_tuple.index("萌萌哒") #没有find方法
test_tuple.index("加息", 1, 4) #从特定位置查找,左闭右开区间==>[1,4)
Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)
来说说拆包相关的,C#的上面说了,这边来个案例即可:
a=(1,2)
b=a #把a的引用给b
c,d=a #不是把a分别赋值给c和d,等价于:c=a[0] d=a[1]
Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)
3.Dict系列

Python遍历相关

#每一次相当于取一个元组,那可以用之前讲的例子来简化了:c,d=a #等价于:c=a[0] d=a[1]

for k,v in infos_dict.items():
  print("Key:%s,Value:%s"%(k,v))

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏) 

NetCore:方式和Python差不多

foreach (KeyValuePair<string, object> kv in infos_dict)
{
  Console.WriteLine($"Key:{kv.Key},Value:{kv.Value}");
}

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏) 


Python增删改系列:

增加、修改infos_dict["wechat"]="dotnetcrazy" #有就修改,没就添加

删除系列

# 删除
del infos_dict["name"] #不存在就报错
#清空字典内容
infos_dict.clear()
# 删除字典
del infos_dict

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

NetCore

添加:infos_dict.Add("wechat", "lll");  infos_dict["wechat1"] = "lll";
修改
infos_dict["wechat"] = "dotnetcrazy";
 
删除
infos_dict.Remove("dog"); //不存在不报错  infos_dict.Clear(); //列表内容清空

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏) 


Python查询系列推荐infos_dict.get("mmd") #查不到不会异常

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)


 NetCoreinfos_dict["name"] 可以通过 ContainsKey(key) 避免异常。看值就 ContainsValue(value)

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)

附录Code:

Python List:

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)View Code

Python Tuple:

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)View Code

Python Dict:

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)View Code

NetCore List:

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)View Code

NetCore Tuple:

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)View Code

NetCore Dict:

Python3 与 C# 基础语法对比(List、Tuple、Dict专栏)View Code