Python version 3.7版本
00.命令行交互
Perl | Python |
perl -e <Perl代碼> #Unix/Linux/Windows/DOS | 直接命令行輸入Python回車,就可以編碼運行代碼 |
0.變量
區別:Python變量前沒有區分是普通變量還是列表(數組)的符號,Perl有區分,$bianliang @shuzu %hash
相同:命名要求一致,字母數字下划線
1.print輸出
二者通用格式:print(“字符串”);
Perl:
print(“字符串1”."字符串2".$bianliang(任何變量都可以)."\n"); #無自帶換行符
Python:
print(“字符串1”+“字符串2”+字符變量1+str(非字符變量2)); #a="map" 字符變量 a=1非字符變量 #自帶換行符
對於列表和字典,print(塊1,塊2,塊3) #可以用逗號隔開一起輸出,輸出結果為各模塊之間是空格
2.注釋
二者相同都用#
3.Perl的數組 <=> Python的列表
Perl數組(@arr) | Python列表 | |
定義 | @shuzu=(1,5,'trek','amil'); @shuzu0=(3..18); #3到18,步長為1 #創建數值數組 |
list1=[1,5,'trek','amil'] numbers=list(range(1,6)) #創建數值列表,默認步長為1,數值為[1,6)左閉右開表,即1,2,3,4,5 even_numbers=list(range(2,11,2)) #創建數值列表,步長為2,數值為,2,4,6,8,10 函數range()幾乎能夠創建任何需要的數字集,eg:5**2=25 平方計算等 |
字符串互轉數組(列表) | #轉字符串為數組 $var_names = "google,taobao,runoob,weibo"; @names = split(',', $var_names); #轉數組為字符串 $string2 = join( ',', @names ); |
str= list('trek') #['t','r','e','k'] #轉字符串為列表
|
索引 | 從0開始,索引-1指定為列表最后一個元素,eg: $shuzu[-1] $max_index=$#shuzu; #數組最后一個元素的索引值 |
從0開始,索引-1指定為列表最后一個元素,eg:list1[-1]
|
排序 | @shuzu = sort(@shuzu); #數組排序是根據 ASCII 數字值來排序。所以我們在對數組進 @shuzu1= sort {lc($a) cmp lc($b)} @shuzu #將每個元素轉換為小寫后再按字母順排序, 調整$a與$b位置為倒序排序 @shuzu1= sort {$a <=>$b} @shuzu #對數字從小到大排序,調整$a與$b位置為從大到 小排序 @shuzu = reverse(@shuzu); #逆序,不改變原列表 |
sorted(list1) #按字母順序臨時性排序,不改變原列表排序 #必須用這種格式,list1.sorted()行不通 sorted(list1,reverse=True) #按字母倒序臨時性排序,不改變原列表排序 #必須用這種格式,list1.sorted()行不通
list1.reverse() #逆序,永久性排序 list1.sort() #按字母順序永久性排序,無法恢復到原來的排序 #必須用這種格式,sort(list1)行不通 list1.sort(reverse=True) #按字母倒序永久性排序,無法恢復到原來的排序 |
計算 | $size_arr=@shuzu; #計算數組元素個數 |
len(list1) #計算列表元素個數 min(numbers) #求最小值 max(numbers) #求最大值 sum(numbers) #求和 |
輸出 | print($shuzu[0]); | print(list1[0]); print(list1[0],list[1]) #結果為:1 5 |
末尾添加元素 | push(@shuzu,"字符串"or變量or數組or1..100) | list1.append('tool') |
合並 | @numbers = (1,3,(4,5,6)); @arr0=(@shuzu,@shuzu0); |
|
末尾刪除元素 | $num=pop(@shuzu) #彈出數組最后一個元素,並返回它 | name=list1.pop() #刪除列表末尾元素,並讓你能接着使用此元素 |
刪除索引位置元素 | pop不能; splice (@array, 2, 1) #索引2處,替換一個為空,即刪除索引2處元素,后邊元素自動向前補充 delete $array[2] #刪除數組第3個元素,當index大於數組長度時,函數delete對數組沒影響; |
name=list1.pop(2)#刪除列表任意索引位置的元素,並讓你能接着使用此元素; list1[2:3]='' #將索引2處元素替換為空,后邊遠元素前移 del list1[2] #刪除列表第3個元素 |
刪除指定元素 |
|
name=list1.remove(‘tool’) #刪除列表中的某個指定元素(如果有重復元素, 只刪除索引位置靠前的那個),並返回它可以使用 |
開頭刪除元素 | $num=shift(@shuzu) #彈出數組第一個值,並返回它。數組的索引值也依次減一 | 沒有對應的類似函數 |
開頭添加元素 | unshift(@shuzu,"字符串"or變量or數組or1..100) #將元素放在數組前面,並返回新數組的元素個數 |
沒有對應的類似函數 |
索引位置添加元素 | splice (@array, 1, 0, "Hello") #在1索引位置插入Hello,其他元素一次后移 | list1.insert(0,'tool')#列表索引0處插入元素,原0,1等都往后移動一位 str1 = ["a","b","c"] ;str1[2:2] = "f" #插入新的索引2,原索引2依次往后推 print("插入新的索引2結果 :",str1) #結果:插入新的索引2結果 : ['a', 'b', 'f', 'd', 'e'] |
修改元素 | $shuzu[1]="8" ;#單個位置替換(修改)元素 | list1[1]="8" ; #單個位置替換(修改)元素 |
修改元素(切片|拼接) | splice(@shuzu0, 5, 5, 21..25); #從數組索引值為5(即第6個元素)開始(包含替換 的起始位置)替換5個元素,為21..25; #1個或多個替換(修改)元素
@retval = splice (@array, skipelements, length, @newlist); 拼接函數可以向列表(數組)中間插入元素、刪除子列表或替換子列表。 參數skipelements是拼接前跳過的元素數目,length是被替換的元素數,newlist是將要拼接進來的列表。 當newlist的長度大於length時,后面的元素自動后移,反之則向前縮進。 當length=0時,就相當於向列表中插入元素,而形如語句 splice (@array, -1, 0, "Hello"); 即向數組末尾添加元素。 當newlist為空時,就相當於刪除子列表,這時,如果length為空,就從第skipelements個元素后全部 刪除。所以刪除最后一個元素則為:splice (@array, -1);這種情況下,返回值為被刪去的元素列表。 splice(@array,0,0) #刪除數組所有元素 |
#替換索引2到最后一個索引為'd', 'e' str1 = ["a","b","c"];str1[2:] = list("de") print("替換索引>=2結果 :",str1) #結果:替換索引>=2結果 : ['a', 'b', 'd', 'e'] #替換索引2-3(索引2-3替換為"g","h","i",原索引4到最后依次往后推) str1=['a', 'b', 'f', 'd', 'e'];str1[2:4] = ["g","h","i"] print(str1) #結果:['a', 'b', "g","h","i", 'e'] #刪除列表所有元素 |
切片 |
切片,處理列表部分元素,如下 @shuzu2=@shuzu[2,4,6,7,-3,-1] #數組索引需要指定有效的索引值,可以是正數后負數, 每個索引值使用逗號隔開。 @shuzu3=@shuzu[2..-1] #如果是連續的索引,可以使用 .. 來表示指定范圍。#左閉右閉 |
切片,處理列表部分元素,如下 list2=list1[:] #等價於list1 #可用於復制列表,因為list2=list1 不是復制,只是同 list2=list1[0:-3] #左閉右開,切取列表第1位,到倒數第4位 list2=list1[1:] #從列表第2位到最后 list2=list1[:-1] #從列表第1位開始到倒數第2位 |
元組 |
不可變的列表=》“元組”“tuple”,元組比列表更簡單的數據結構,如下 tuple1=(250,50) #tuple1[0]=400 不允許,會報錯 tuple1=(400,50) #給元組變量賦值是合法的,不會報錯,之前元素被覆蓋 |
|
唯一元素數組(列表) |
每個元素都唯一的列表=》集合 set(list1),不改變原列表 |
4.for循環
Perl:
for( $a = 0; $a < 10; $a = $a + 1 ){
print "a 的值為: $a\n";
}
Python:
for list_v in list1: #遍歷列表
print(list_v);
#break #退出while循環,不再運行循環中余下代碼
#continue #終斷單次循環,進入下一個循環
print("thank you,everyone\n");
列表解析
squares=[value**2 for value in range(1,11)] #[1,4,9,16,25,36,49,64,81,100]
for key1,value1 in alien.items(): #遍歷字典所有鍵值對
print("\nKey: "+ key1)
print(Value: " + value1)
for key1 in alien.keys(): #遍歷字典中的所有鍵
#for key1 in alien: #遍歷字典中的所有鍵,遍歷字典時,默認遍歷所有的鍵
print(key1.title())
for key1 in sorted(alien.keys()): #按順序遍歷字典中的所有鍵
print(key1.title())
for value1 in alien.values(): #遍歷字典中所有值,沒有刪除重復,都列出
print(value1.title())
for value1 in set(alien.values()): #遍歷字典中所有值,刪除重復,值唯一,set(集合)類似於列表
print(value1.title())
注意:for能遍歷列表,但不能修改列表,否則Python難以跟蹤其中元素;
5.if條件判斷
注意:Perl和Python都是只要一個在if整體模塊中,只要有一個if 或者elsif|elif判斷是真,下邊的條件判斷就會跳過去,不在運行;
Perl:
if(條件判斷){
}
if(條件判斷){
}else{ #可省略
}
if(條件判斷){
}elsif(條件判斷){
}else{ #可省略
}
條件判斷常用:
True #布爾值
not True #布爾值
! True #布爾值
False #布爾值
數字 0、字符串 '0' 、 "" 、空數組list () 和 undef 為 false
> ; >= ; < ; <= ; ==;!=;<=>比較,返回0或者 1或者 -1; #數值比較大小 == #判斷是否相等; != #判斷是否不相等;
bt ; be ; lt ; le ; eq ; ne ; cmp比較,返回0或者 1或者 -1; #字符串比較大小
=~ #匹配
&& #且
|| #或者
Python:
if 條件判斷:
執行語句1
執行語句2
if 條件判斷:
執行語句
else: #可省略
執行語句
if 條件判斷:
執行語句
elif 條件判斷:
執行語句
else: #可省略
執行語句
條件判斷常用:
bianliang1=True #直接布爾值
bianliang2=False #直接布爾值
列表為空,即list1=[],則 if list1 : 判斷為False
== #判斷是否相等; #區分字母大小 #適用於字符串、數值
!= #判斷是否不等; #區分字母大小 #適用於字符串、數值
car=“Audi”; car.lower()=="audi" #都轉化為小寫,再比較;
< ; <=; >; >=; ==;!= ; #比較數值大小
4 % 3 == 1 #求模運算符%,兩個數相除返回余數
and #且
or #或
list1=['1','buht','4']; "buht" in list1 #True #判斷某元素是否在列表中
list1=['1','buht','4']; "8" not in list1 #True #判斷某元素是否在列表中
6.Perl的哈希hash<=> Python字典
Perl:
%data= ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
print "\$data{'google'} = $data{'google'}\n";
Python:
alien_0={'color':'green','points':5} #定義字典,方式1
alien_0={ #定義字典,方式2,多了個最后的逗號,大括號位置必須這樣放,注意縮進格式固定
'color':'green',
'points':5,
}
print("alien_0['color'] = "+alien_0['color']);
print("alien_0['points'] = "+alien_0['points']);
print(alien_0['color'],alien_0['points']) #結果為:green 5
一個鍵對應一個值,值可以是Python中任何對象(eg:數字、字符串、列表、字典);所有的鍵之間必須唯一,所有的值可不唯一;
alien_0['x_position']=0 #添加鍵值對 #鍵值對的添加順序跟添加順序不同,因為字典關注的是鍵值關聯關系
alien_0={} #創建空字典
alien_0['color']='yellow' #修改字典中的值,由green變yellow
del alien_0['color'] #刪除鍵值對
#嵌套
#嵌套-字典列表(列表中嵌套字典)------------------------------>經常需要在列表中包含大量的字典,而其中每個字典都包含特定對象的眾多信息
alien_0={'color':'green','points':5}
alien_1={'color':'yellow','points':7}
alien_2={'color':'red','points':8}
aliens=[alien_0,alien_1,alien_3]
for alien in aliens:
print(alien)
#嵌套-列表字典(字典中嵌套列表)------------------------------->每當需要在字典中將一個鍵關聯到多個值時,都可以在字典中嵌套一個列表【即,字典是鍵值一對一,值用列表,就相當於鍵值一對多】
pizza={ #一個物體,對應多個方面的信息
‘crust’:‘thick’, #披薩皮厚薄
‘toppings’:['mushrooms','extra cheese'], #披薩配料
}
#嵌套-字典字典(字典中嵌套字典) -------------------------------->內部嵌套的眾多字典,一般結構都相同,因為,這樣使得后續的處理(eg:for循環)簡單,否則會很復雜
users ={
'A':{
'first':'albert',
'last':'einstein',
'loacation':'paris',
},
'B':{
'first':'marie',
'last':'curie'
'location':'princeton',
},
}
7.指引用戶輸入、獲取用戶輸入
Perl:
獲取用戶命令行輸入:
$input=<STDIN>
@ARGV#命令行輸入的東西,按空格分開,一次存入數組
輸出:
print STDOUT << "EOF"; #EOF 是一個標記的名字,自定義標記名稱
Python:
message = input("Tell me something,and I will repeat it back to you: ") #將獲取內容存儲為字符串;#冒號后面,包含一個空格,可將提示與用戶輸入分開,讓用戶清楚的知道其輸入始於何處
print(message)
message = int(message) #如果message獲取的內容是數值,則可以用int()轉為數值
8.while循環
Perl:
Python:
while 條件判斷:
執行語句
#break #退出while循環,不再運行循環中余下代碼
#continue #終斷單次循環,進入下一個循環
while能遍歷列表同時修改列表;for能遍歷列表,但不能修改列表,否則Python難以跟蹤其中元素;
while能將列表和字典結合起來使用,可收集、存儲並組織大量輸入,供以后查閱和顯示;
9.python函數