python字元串中的數字排序
① python中「format後的參數排列順序必須按照格式字元串中槽{}的排列順序依次一一對應」為什麼錯誤謝謝
format函數實現字元串格式化的功能
基本語法為:
通過 : 和 {} 來控制字元串的操作
一、對字元串進行操作
1. 不設置指定位置,按默認順序插入
①當參數個數等於{}個數的時候
str_1 = "小明{}小美,可是小美{}小明".format("喜歡", "不喜歡")
print(str_1)
運行結果:
②當參數個數大於{}個數的時候
str_1 = "小明{}小美,可是小美{}小明".format("喜歡", "不喜歡", "也不喜歡", "更不喜歡")
print(str_1)
運行結果:
③當參數個數習小於{}個數的時候
str_1 = "小明{}小美,可是小美{}小明".format("喜歡")
print(str_1)
運行結果:
程序會報錯:越界
由此可以得出,當我們不指定參數位置的時候,format函數會幫我們按順序將其接收到的參數,填入到{}中。
2. 設置指定位置
當format接收到的參數個數大於{}或者我們想將不同{}替換為相同字元串的時候,我們可以在{}內指定接收第幾個參數。format接收的參數,從0開始。
str_1 = "小明{1}小美,可是小美{3}小明,小美{0}小明,小美{2}小華".format("不喜歡", "喜歡", "更喜歡", "很討厭")
print(str_1)
在這一句代碼中,分別為不同的{}指定了接收的參數位置。
運行結果:
很顯然,如果我們的{}的個數小於format的參數也是OK的。
str_1 = "小明{1}小美,可是小美{3}小明,小美{2}小華".format("不喜歡", "喜歡", "更喜歡", "很討厭")
print(str_1)
運行結果:
由此我們得出結論:
在使用format()函數的時候,我們給format()的個數是不限的,如果我們並沒有在{}中指定位置,那麼format()會自動按順序將參數填入{},而如果我們為{}指定了位置,那麼format()就會把指定位置的參數填入對應的{}中。
3.設置format()參數的值①直接在format()中進行賦值
str_1 = "博主:{name}, 博客地址:{url}".format(name="KaiSarH", url="https://blog.csdn.net/KaiSarH")
運行結果:
②通過傳遞多值參數向format傳遞參數進而對{}進行賦值
- 使用**傳遞字典。
在Python中,使用**可以傳遞一個字典參數,我們可以使用鍵名進行匹配,進而進行賦值
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
運行結果:
我們向format()傳遞的字典參數,所包含的鍵值對,必須包含所有的{}名。只能多(正確),不能少(報錯)。
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_2)
dict_1 = {"name": "KaiSarH",
"key": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_4)
運行結果:
注意:我們可以向format()中傳遞多個字典,但是不可以含有相同鍵。
dict_1 = {"name": "KaiSarH",
"url": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
dict_2 = {"name": "KaiSarH",
"key": "https://blog.csdn.net/KaiSarH",
"login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1, **dict_2)
print(str_4)
運行結果:
- 傳遞列表
list_1 = ["KaiSarH","https://blog.csdn.net/KaiSarH"]
str_3 = "博主:{0[0]}, 博客地址:{0[1]}".format(list_1)
運行結果:
除了傳遞一個列表,我們也可以向format()中傳遞多個列表,只需保證取值的時候無誤就可以。
list_1 = ["ZhangSan","https://blog.csdn.net/KaiSarH"]
list_2 = ["KaiSarH", "http:www..com"]
str_3 = "博主:{1[0]}, 博客地址:{0[1]}".format(list_1, list_2)
運行結果:
③向format()中傳入對象,進行賦值
與列表相同,我們同樣可以向format()中傳遞多個對象,只要在賦值的之後做好對應就可以。
class Dog:
def __init__(self, name):
self.name = name
class Mouse:
def __init__(self, name):
self.name = name
tom = Dog("Tom")
jerry = Mouse("Jerry")
str_1 = "{0.name} want to eat {1.name}".format(tom, jerry)
print(str_1)
運行結果:
二、對數字進行格式化
對於數字的格式化,我們主要是在{}中進行設置格式化數字的多種方法
1.保留小數點後n位
格式:{:.nf}
print("{:.1f}".format(3.1415926535))
print("{:.3f}".format(3.1415926535))
print("{:.4f}".format(3.1415926535))
print("{:.6f}".format(3.1415926535))
運行結果:
2.帶符號保留小數點後n位
格式:{:+.nf}
print("{:+.1f}".format(3.1415926535))
print("{:+.3f}".format(-3.1415926535))
print("{:+.4f}".format(3.1415926535))
print("{:+.6f}".format(-3.1415926535))
運行結果:
{:.nf}和 {:+.nf}的區別
負數無區別,整數有無符號。
print("{:.1f}".format(3.1415926535))
print("{:+.1f}".format(3.1415926535))
print("{:.3f}".format(-3.1415926535))
print("{:+.3f}".format(-3.1415926535))
print("{:.4f}".format(3.1415926535))
print("{:+.4f}".format(3.1415926535))
print("{:.7f}".format(-3.1415926535))
print("{:+.7f}".format(-3.1415926535))
運行結果:
3.不帶小數(只保留整數)
格式:{:.0f}
print("{:.0f}".format(3.1415926535))
print("{:.0f}".format(-3.1415926535))
print("{:.0f}".format(3.8415926535))
運行結果:
4.如果整數的位數不足n位,在左邊進行數字補零。如果已經夠了n位,直接輸出
格式:{:0>nd}
print("{:0>2d}".format(5))
print("{:0>3d}".format(5))
print("{:0>5d}".format(123456))
運行結果:
5.如果整數的位數不足n位,在右邊進行x補充。如果已經夠了n位,直接輸出
格式:{:x<4d}
print("{:x<2d}".format(5))
print("{:x<3d}".format(5))
print("{:x<4d}".format(123456))
運行結果:
很顯然,在補充操作中,我們既可以指定在哪一邊補充,也可以指定補充的值為什麼。
我們也可以利用print("{:x>.2f}".format(3.1))或者{:x<.2f>
6.以逗號分隔數字格式,每三位加入一個,
格式:{:,}
print("{:,}".format(314156926))
運行結果:
7.百分比格式(在我理解,就是把數字×100,保留兩位數字,然後加一個百分號)
格式:{:.2%}
print("{:.2%}".format(0.27896))
運行結果:
8.指數記法
格式:{:.2e}
print("{:.2e}".format(100))
運行結果:
9.右對齊(默認寬度為10)
格式:{:>10d}
print("{:>10d}".format(100))
print("{:>10d}".format(2))
print("{:>10d}".format(12580))
運行結果:
10.左對齊(默認寬度為10)
格式:{:<10d}
print("{:<10d}".format(100))
print("{:<10d}".format(2))
print("{:<10d}".format(12580))
運行結果:
11.中間對齊(默認寬度為10)
格式:{:^10d}
print("{:^10d}".format(100))
print("{:^10d}".format(2))
print("{:^10d}".format(12580))
運行結果:
12.進制——b、d、o、x 分別是二進制、十進制、八進制、十六進制。
格式:
『{:b}'.format(11)
『{:d}'.format(11)
『{:\o}'.format(11)
『{:x}'.format(11)
『{:#x}'.format(11)
『{:#X}'.format(11)
print("{:b}".format(125))
print("{:d}".format(125))
print("{:o}".format(125))
print("{:x}".format(125))
print("{:#x}".format(125))
print("{:#X}".format(125))
運行結果:
② python按字元串個數排序
用一個字元一個字元去判斷的話估計是很復雜,用正則表達式去判斷應該會快點。
③ Python中的幾種數據類型
大體上把Python中的數據類型分為如下幾類:
Number(數字) 包括int,long,float,complex
String(字元串) 例如:hello,hello,hello
List(列表) 例如:[1,2,3],[1,2,3,[1,2,3],4]
Dictionary(字典) 例如:{1:nihao,2:hello}
Tuple(元組) 例如:(1,2,3,abc)
Bool(布爾) 包括True、False
由於Python中認為所有的東西都是對象,所以Python不用像其它一些高級語言那樣主動聲缺慎豎明一個變數的類型。
例如我要給一個變數i賦值100,python的實現 :
i=100
C#的實現:
int i = 100;
下面一一簡單介紹這幾種數據類型
數字類型
int和long
之所以要把int和long放在一起的原因是python3.x之後已經不區分int和long,統一用int。python2.x還是區分的。下面我以Python2.7為例:
i = 10
type(i)
i=10000000000
type(i)
那麼為什麼10就是int,10000000000就是long呢,當然這就和int的最大值有關了,int類孝毀型的最大值為231-1,即2147483647,也可以用sys.maxint。
2**31-1
2147483647L
sys.maxint
2147483647
為什麼用上面的方法求的值就是long型的呢(數字後面加『L』表示是long型),因為2**31的值為2147483648,這個值是一個long型,用一個long型減去1,結果還是一個long,但實際上int型的最大值就是2147483647
type(2147483647)
type(2147483648)
float類型
float類型和其它語言的float基本一致,浮點數,說白了,就是帶小數點的數,精度與機器相關。例如:
i = 10000.1212
type(i)
complex:復數類型,具體含義及用法可自行查看相關文檔。
字元串類型
字元串的聲明有三種方式:單引號、雙引號和三引號(包括三個單引號或三個雙引號)。例如:
str1 = hello world
str2 = hello world
str3 = hello world
str4 = hello world
print str1
hello world
print str2
hello world
print str3
hello world
print str4
hello world
Python中的字元串有兩種數據類型:str類型和unicode類型。str類型採用的ASCII編碼,也就是說它無法表示中文。unicode類型採用unicode編碼,能夠表示任意字元,包括中文及其它語言。並且python中不存在像c語言中的char類型,就算是單個字元也是字元串類型。字元串默認採用的ASCII編碼,如果要顯示聲明為unicode類型的話,需要在字伏大符串前面加上u或者U。例如:
str1 = hello
print str1
hello
str2 = u中國
print str2
中國
由於項目中經常出現對字元串的操作,而且由於字元串編碼問題出現的問題很多,下面,來說一下關於字元串的編碼問題。在與python打交道的過程中經常會碰到ASCII、Unicode和UTF-8三種編碼。具體的介紹請參見這篇文章。我簡單的理解就是,ASCII編碼適用英文字元,Unicode適用於非英文字元(例如中文、韓文等),而utf-8則是一種儲存和傳送的格式,是對Uncode字元的再編碼(以8位為單位編碼)。例如:
u = u漢
print repr(u) # uu6c49
s = u.encode(UTF-8)
print repr(s) # xe6xb1x89
u2 = s.decode(UTF-8)
print repr(u2) # uu6c49
解釋:聲明unicode字元串」漢「,它的unicode編碼為」u6c49「,經過utf-8編碼轉換後,它的編碼變成」xe6xb1x89「。
對於編碼的經驗總結:
1.在python文件頭聲明編碼格式 ;
#-*- coding: utf-8 -*-
2.將字元串統一聲明為unicode類型,即在字元串前加u或者U;
3.對於文件讀寫的操作,建議適用codecs.open()代替內置的open(),遵循一個原則,用哪種格式寫,就用哪種格式讀;
假設在一個以ANSI格式保存的文本文件中有「中國漢字」幾個字,如果直接用以下代碼,並且要在GUI上或者在一個IDE中列印出來(例如在sublime text中,或者在pydev中列印),就會出現亂碼或者異常,因為codecs會依據文本本身的編碼格式讀取內容:
f = codecs.open(d:/test.txt)
content = f.read()
f.close()
print content
改用如下方法即可(只對中文起作用):
# -*- coding: utf-8 -*-
import codecs
f = codecs.open(d:/test.txt)
content = f.read()
f.close()
if isinstance(content,unicode):
print content.encode(utf-8)
print utf-8
else:
print content.decode(gbk).encode(utf-8)
列表類型
列表是一種可修改的集合類型,其元素可以是數字、string等基本類型,也可以是列表、元組、字典等集合對象,甚至可以是自定義的類型。其定義方式如下:
nums = [1,2,3,4]
type(nums)
print nums
[1, 2, 3, 4]
strs = [hello,world]
print strs
[hello, world]
lst = [1,hello,False,nums,strs]
type(lst)
print lst
[1, hello, False, [1, 2, 3, 4], [hello, world]]
用索引的方式訪問列表元素,索引從0開始,支持負數索引,-1為最後一個.
lst = [1,2,3,4,5]
print lst[0]
1
print lst[-1]
5
print lst[-2]
4
支持分片操作,可訪問一個區間內的元素,支持不同的步長,可利用分片進行數據插入與復制操作
nums = [1,2,3,4,5]
print nums[0:3] #[1, 2, 3] #前三個元素
print nums[3:] #[4, 5] #後兩個元素
print nums[-3:] #[3, 4, 5] #後三個元素 不支持nums[-3:0]
numsclone = nums[:]
print numsclone #[1, 2, 3, 4, 5] 復制操作
print nums[0:4:2] #[1, 3] 步長為2
nums[3:3] = [three,four] #[1, 2, 3, three, four, 4, 5] 在3和4之間插入
nums[3:5] = [] #[1, 2, 3, 4, 5] 將第4和第5個元素替換為[] 即刪除[three,four]
支持加法和乘法操作
lst1 = [hello,world]
lst2 = [good,time]
print lst1+lst2 #[hello, world, good, time]
print lst1*5 #[hello, world, hello, world, hello, world, hello, world, hello, world]
列表所支持的方法,可以用如下方式查看列表支持的公共方法:
[x for x in dir([]) if not x.startswith(__)]
[append, count, extend, index, insert, pop, remove, reverse, sort]
def compare(x,y):
return 1 if xy else -1
#【append】 在列表末尾插入元素
lst = [1,2,3,4,5]
lst.append(6)
print lst #[1, 2, 3, 4, 5, 6]
lst.append(hello)
print lst #[1, 2, 3, 4, 5, 6]
#【pop】 刪除一個元素,並返回此元素的值 支持索引 默認為最後一個
x = lst.pop()
print x,lst #hello [1, 2, 3, 4, 5, 6] #默認刪除最後一個元素
x = lst.pop(0)
print x,lst #1 [2, 3, 4, 5, 6] 刪除第一個元素
#【count】 返回一個元素出現的次數
print lst.count(2) #1
#【extend】 擴展列表 此方法與「+」操作的不同在於此方法改變原有列表,而「+」操作會產生一個新列表
lstextend = [hello,world]
lst.extend(lstextend)
print lst #[2, 3, 4, 5, 6, hello, world] 在lst的基礎上擴展了lstextend進來
#【index】 返回某個值第一次出現的索引位置,如果未找到會拋出異常
print lst.index(hello) #5
#print lst.index(kitty) #ValueError: kitty is not in list 出現異常
#【remove】 移除列表中的某個元素,如果待移除的項不存在,會拋出異常 無返回值
lst.remove(hello)
print lst #[2, 3, 4, 5, 6, world] hello 被移除
#lst.remove(kitty) #ValueError: list.remove(x): x not in list
#【reverse】 意為反轉 沒錯 就是將列表元素倒序排列,無返回值
print lst #[2, 3, 4, 5, 6, world]
lst.reverse()
print lst #[2, 3, 4, 5, 6, world]
#【sort】 排序
print lst #由於上面的反轉 目前排序為 [world, 6, 5, 4, 3, 2]
lst.sort()
print lst #排序後 [2, 3, 4, 5, 6, world]
nums = [10,5,4,2,3]
print nums #[10,5,4,2,3]
nums.sort(compare)
print nums #[2, 3, 4, 5, 10]
列表轉換為迭代器。
所謂的迭代器就是具有next方法(這個方法在調用時不需要任何參數)的對象。在調用next方法時,迭代器會返回它的下一個值。如果next方法被調用,但迭代器沒有值可以返回,就會引發一個StopIteration異常。迭代器相對於列表的優勢在於,使用迭代器不必一次性將列表加入內存,而可以依次訪問列表的數據。
依然用上面的方法查看迭代器的公共方法:
lst = [1,2,3,4,5]
lstiter = iter(lst)
print [x for x in dir(numiter) if not x.startswith(__)]
[next]
沒錯,只有next一個方法,對於一個迭代器,可以這樣操作:
lst = [1,2,3,4,5]
lstiter = iter(lst)
for i in range(len(lst)):
print lstiter.next() #依次列印
1
2
3
4
5
元組類型
元組類型和列表一樣,也是一種序列,與列表不同的是,元組是不可修改的。元組的聲明如下:
lst = (0,1,2,2,2)
lst1=(hello,)
lst2 = (hello)
print type(lst1) # 只有一個元素的情況下後面要加逗號 否則就是str類型
print type(lst2) #
字典類型
字典類型是一種鍵值對的集合,類似於C#中的Dictionary
dict1 = {}
print type(dict1) # 聲明一個空字典
dict2 = {name:kitty,age:18} #直接聲明字典類型
dict3 = dict([(name,kitty),(age,18)]) #利用dict函數將列表轉換成字典
dict4 = dict(name=kitty,age=18) #利用dict函數通過關鍵字參數轉換為字典
dict5 = {}.fromkeys([name,age]) #利用fromkeys函數將key值列表生成字典,對應的值為None {age: None, name: None}
字典基本的操作方法:
#【添加元素】
dict1 = {}
dict1[mykey] = hello world #直接給一個不存在的鍵值對賦值 即時添加新元素
dict1[(my,key)] = this key is a tuple #字典的鍵可以是任何一中不可變類型,例如數字、字元串、元組等
#【鍵值對個數】
print len(dict1)
#【檢查是否含有鍵】
print mykey in dict1 #True 檢查是否含有鍵為mykey的鍵值對
print hello in dict1 #False
#【刪除】
del dict1[mykey] #刪除鍵為mykey的鍵值對
繼續利用上面的方法查看字典的所有公共方法:
[x for x in dir({}) if not x.startswith(__)]
[clear, , fromkeys, get, has_key, items, iteritems, iterkeys, itervalues,
keys, pop, popitem, setdefault, update, values, viewitems, viewkeys, viewvalues]
dict.clear() 刪除字典中所有元素
dict.() 返回字典(淺復制)的一個副本
dict.get(key,default=None) 對字典dict 中的鍵key,返回它對應的值value,如果字典中不存在此鍵,則返回default 的值(注意,參數default 的默認值為None)
dict.has_key(key) 如果鍵(key)在字典中存在,返回True,否則返回False. 在Python2.2版本引入in 和not in 後,此方法幾乎已廢棄不用了,但仍提供一個 可工作的介面。
dict.items() 返回一個包含字典中(鍵, 值)對元組的列表
dict.keys() 返回一個包含字典中鍵的列表
dict.values() 返回一個包含字典中所有值的列表
dict.iter() 方法iteritems(), iterkeys(), itervalues()與它們對應的非迭代方法一樣,不同的是它們返回一個迭代器,而不是一個列表。
dict.pop(key[, default]) 和方法get()相似,如果字典中key 鍵存在,刪除並返回dict[key],如果key 鍵不存在,且沒有給出default 的值,引發KeyError 異常。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 鍵,由dict[key]=default 為它賦值。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 鍵,由dict[key]=default 為它賦值。
布爾類型
布爾類型即True和False,和其它語言中的布爾類型基本一致。下面列出典型的布爾值
print bool(0) #False
print bool(1) #True
print bool(-1) #True
print bool([]) #False
print bool(()) #False
print bool({}) #False
print bool() #False
print bool(None) #False
④ python中字元怎麼比較大小排序
任何兩個對象都可以比較
相同類型的對象(實例),如果是數字型(int/float/long/complex),則按照簡單的大小來比較;如果是非數字型,且類(型)中定義了__cmp__(含__gt__,__lt__等)則按照__cmp__來比較,否則按照地址(id)來比較
不同類型的對象(實例),如果其中一個比較對象是數字型(int/float/long/complex等),則數字型的對象<其它非數字型的對象;如果兩個都是非數字型的對象,則按照類型名的順序比較,如{}
<
"abc"(按照"dict"
<
"str"),而"abc"
>
[1,2],
"abc"
<
(1,2)。
對於自定義的類(型)實例,如果繼承自基本類型,則按照基本類型的規則比較(1-3)。否則,old-style
class
<
new-style
class,
new-style
class之間按照類型名順序比較,old-style
class之間按照地址進行比較
bool類型是int的子類,且true=1,
false=0,比較時按照1-4來比較,如true
>
-1,
true
<
4.2,
true
<
"abc"等
上面的回答是針對python2.x,3.x的有較大的變化,如str和int比較時會拋出異常等。
回到題目,字元和數字的比較符合規則3,所以數字<字元。舉個例子,如100和'a'(ord('a')=97),有
100<'a'
⑤ 八、 python中的數據類型——字元串
字元串是由數字、字母、下劃線組成的一串字元,比如 「hello, world!」 ,這就是一個字元串。
在python中,字元串要用引號括起來,單號號或者雙引號都可以。像是 'abc' , "xyz" 都是字元串。
在python中字元串用單引號或者雙引號括起來,例如 'a' , "b" ,a和b都是字元串類型,可以使用 type() 函數查看
python中還可以用三個引號表示字元串, ''' 或者 """ 都可以,它主要是用來表示跨行的字元串,例如:
執行 print(a,type(a)) ,可以看到結果
在"荒野獵人"和"2015-12-16"後面,都有'\n',只不過'\n'在shell中被列印出來了,所以看不到。
'\n'代表換行,因為有'\n'的存在,所以"2015-12-16","萊昂納多·迪卡普里奧 / 湯姆·哈迪"和"8.2"才從下一行開始列印。
為什麼有'\n'? 因為在定義a的時候,輸入完「荒野獵人」後按的回車,回車在計算機語言中即為'\n'。
在兩個三引號之間,單引號和雙引號都可以使用。同理,在單引號之間,可以用雙引號,在雙引號間可以用單引號。例如:
在表示一個單引號的時候,可以使用兩個雙引號,也就是 "'" ,也就是上面的例子a,另一種方法是用 '\'' ,反斜杠單引號等價於一個單引號,即:
兩個反斜杠\\代表一個反斜杠,因為你要列印一個反斜杠,但是反斜杠是轉義的意思,因此有一個特殊的轉義符 \\\\ ,它代表著一個反斜杠。
prefix還可以是元組,S.startswith(('a','b')),當S以'a'或者'b'開頭時返回True。
與find相對的,還有個rfind方法。
S.rfind(sub) -> int
它與find的區別是,find是從字元串左側開始查找,而rfind是從右側開始查找。兩者都是查找到第一個sub後就停止查找,立刻返回其索引值,沒找到返回-1。
關於更多字元串的信息,可以使用 help(str) 查看。
⑥ python 字元串列表中根據字元串內的數字進行排序。
你的列表A現在不就是按所含數字從大到小排列的嗎?
不過,我還是用正則表達式的方法幫你排了一下序,如果你要數字從小到大排序,只要把alist.sort(key=sort_key,reverse=True)改成alist.sort(key=sort_key,reverse=False)就行了.
完整的Python程序如下
importre
defsort_key(s):
ifs:
try:
c=re.findall('d+$',s)[0]
except:
c=-1
returnint(c)
defstrsort(alist):
alist.sort(key=sort_key,reverse=True)
returnalist
A=['abc15','abd13','abe9','abf6','abg2']
print(strsort(A))
⑦ python如何對字元串進行排序
可以用sorted函數
⑧ day-04 總結python字元串
1.什麼是字元串
序列,有序,不可變的
用單引號或者雙引號任意字元集,
2,字元串中的字元
普通字元:ན', 'sdfsdfsd', '+ + (**&^%$#@@', '發技術規范舉案說法'
'''
python中的字元採用的是unicode編碼
1.什麼是編碼
就是數字和字元的一一對應的,其中字元對應的數字就是字元的編碼
a - 97
b - 98
2.編碼方式
ASCII碼表 :針對數字字元,字母字元(26個小寫字母和26個大寫字母),一些英文中對應的符號進行編碼
小寫字母要大於大寫字母的編碼值,採用一個位元組對字元進行編碼,只能對128個字元進行編碼
Unicode碼 :Unicode碼包含了ASCII碼表,同時能夠對世界上所有語言對應的符號進行編碼,
採用兩個位元組進行編碼,能夠編碼65536個字元
3.兩個函數
chr(編碼值)--將字元編碼值轉化為字元
ord(字元)-- 獲取字元對應的編碼值
中文編碼范圍 0x4e00~~~~~0x9fa5
一旦一個字元串確定了,那麼字元串中每個字元的位置就確定了,而且每個字元會對應一個表示其位置和順序的下標值
1,下標(索引)
字元串中的每一個字元都有一個下標,代表在字元串中的位置
下標范圍是:0到字元串長度---1 0(代表第一個字元的位置)
-1 ~ 字元串長度 -1(代表字元串中最後一個字元的位置)
'abc' # ''
獲取單個字元
語法:字元串[下標]--獲取字元串中指定下標對應的字元
說明 字元串--可以是字元串常量,也可以是字元串變數
[]---固定寫法
下標--字元的下標,不能越界。
獲取部分字元
語法:字元串[開始下標:結束下標:步長]
步長-- 一個整數
功能: 從開始下標獲取到結束下標前位置,每次下標值增加步長,結果是字元串
注意:當步長是整數,開始下標對應的字元要在結束下標的前面
當步長是負數,開始下標對應的字元要在結束下標的後面
方法2:字元串[開始下表:結束下標](相當於步長是一)
獲取部分字元,省略下標
獲取部分字元的時候開始下標和結束下標都可以省略
a.開始下標省略
字元串[:結束下標:步長] 或者字元串[:結束下表]
字元串是正數:從字元串開頭開始往後獲取
字元串是負數:從字元串結尾開始往前獲取
結束下標省略
字元串[開始下標::步長]
步長是正數,從開始下標從前往後獲取到字元串最後
步長是負數,從開始下標從後往前獲取到字元串開始
,加法運算
字元串1 + 字元串2 將兩個字元串拼接在一起,產生一個新的字元串
乘法運算
字元串 * n(正整數):字元串中的內容重復n次產生一個新的字元串
比較運算符
a. == !=
字元串1 == 字元串2 ---------判斷兩個字元串是否相等
b.> ,< , >= ,<= (所有的大寫字母編碼都比小寫的編碼小)
兩個字元串比較大下:從第一個開始,找到第一對不同的字元,然後比較他們的編碼值的大小
in 和 not in
字元串1 in 字元串2 :判斷字元串2是否包含字元串1
字元串1 not in 字元串2 :判斷字元串2是否不包含字元串1
len函數
len(序列)------- 獲取序列的長度
len(字元串)----獲取字元串中字元的個數
str函數
str(數據): 將數據轉換成字元串
其他數據轉換成字元串
所有的數據都可以轉換成字元串,轉換的時候就是在數據的值的最外面加引號
補充:系統對應的類型名不能用來給變數命名
字元串轉其他類型
字元串轉整數: int(字元串) 去掉引號後本身就是個整數的字元串才能轉
字元串轉浮點型: Float(字元串)
字元串轉布爾: boll(字元串) ,除了空串會轉化成False,其他的都會轉化成True
格式字元串
指的是字元串中通過格式佔位符來表示字元串中變化,然後後面再通過其他的值來給佔位符賦值
含有格式佔位符的字元串 % (佔位符對應的值)
說明:
含有格式佔位符有固定寫法,可以有多個
%----固定寫法
()----裡面值 的個數要和前面的格式佔位符一一對應
%d--整數
%s--字元串
%f--小數
%c--字元(可以將數字轉換成字元)
字元串.capitalize() - 將字元串第一個字元轉換成大寫
2.字元串對齊
字元串.center(width, fillchar) - 居中
字元串.ljust(width, fillchar) - 左對齊
字元串.rjust(width, fillchar) - 右對齊
width - 正整數,表示新的字元串的寬度
fillchar - 字元, 填充字元串
字元串.isalpha 若字元串至少有一個字元,並且所有字元都是字母就返回True,否則返回False
字元串。isdigit() 若字元串中只包含數字就返回True,否則返回False
若字元串中只包含數字字元,則返回True,否則返回 False
3.join(seq)
字元串1.join(字元串2): 將字元串1的內容插入到字元串2的每個字元之間
max(字元串) 編碼最大
min(字元串)
count(str)|返回 str 在 string 裡面出現的次數
|islower()|如果字元串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False
expandtabs(tabsize=8)|把字元串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8 。
|isspace()|如果字元串中只包含空白,則返回 True,否則返回 False
endswith(suffix)|檢查字元串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的范圍內是否以 obj 結束,如果是,返回 True,否則返回 False.
⑨ python中ascii碼排序的問題
s=input('請輸入3個字母:')
s=s.strip().split()
s.sort()
print('從小到大排序後是:')
print(' '.join(s))
⑩ python常見數據類型
一,python整數類型所表示的數據。
1,一般用以表示一類數值:所有正整數,0和負整數;
2,整型作為最常用的,頻繁參與計算的數據類型,在python3.5中解釋器會自動在內存中創建-5-3000之間的(包含5,不包含3000)整型對象,也就是說在該范圍內,相等都是同一個已經創建好的整型對象。范圍之外的即使相等也表示不同對象,該特性隨python版本而改變,不要過於依賴。
3,bool型繼承了int型,他是int的子類。
4,Python2中有長整型long,數值范圍更大,在python3中已取消,所有整型統一由int表示。
5,參與所有數值計算,數學運算,科學計算。這也是所有編程語言都有的數據類型,因為編程語言生而需要模擬人的思維,藉助數學方式,自動計算、更好的解決大量重復性的事務,因此數值類型、整數類型在編程語言中不可或缺。
6,支持二進制(0b\0B開頭),十進制,八進制(0o\0O),十六進制(0x\0X)
二,python整數和浮點型支持常規的數值運算
整數和浮點數都可參與的運算:+ - * / %(取余) //(整除) **(冪)
Python字元型:
python字元型表示的數據:
python3支持Unicode編碼,由字母、數字和符號組成的形式就叫字元串,更接近或者相同與人們文字元號表示,因此在信息表示和傳遞時它也是最受認可的形式。在程序編寫中也是非常常用,對應的可操作的方法也很多,很有意思。
字元串不可被修改,可以拼接等方法創建新字元串對象;
支持分片和下標操作;a[2:]
支持+拼接,*重復操作和成員關系in/not in;
表示形式:用單引號雙引號包含起來的符號;a = str(『sdfsdfsdf』) 或 r』\t\nabcd』 原始字元,Bytes:b』abcd』;
6,字元串屬於不可變數據類型,內部機制為了節省空間,相同的兩個字元串表示相同的一個對象。a = 『python』 b = 『python』 a is b :True
二, 字元串支持的運算方法
1,capitalize() :首字母大寫後邊的字母小寫 a = 『abcd』 b = a.capitalize() b:Abcd
2,casefold() lower():字母轉換為全小寫
3,center(width,fillchar) :居中,width填補的長度;fillchar添加的字元
a = a.center(10,』_』) //』____abcd____』 默認無fillchar填充空格
4,count(sub,star,end) :字母計數:sub要查詢的字元
5,encode(encoding=』utf-8』,errors=』strict』) 設置編碼
Errors :設置錯誤類型
6,endswith(suffix,star,end) : 若以suffix結尾返回True
7,expandtabs(8) :設置字元串中tab按鍵符的空格長度:』\tabcde』
8,find(sub,star,end) : 返回指定范圍內的字元串下標,未找到返回-1
9,index(sub,star,end) :返回指定范圍字元串下標未找到拋出異常
10,isalnum() :判斷字元串是否是字母或數字,或字母和數字組合
11,isalpha() :判斷是否全是字母
12,isdecimal() :判斷字元串是否是十進制數值
13,isdigit() :判斷字元串是否是數字
14,isidentifier() :判斷字元串中是否包含關鍵字
15,islower() :判斷是否全小寫
16,isnumeric() :判斷全是數字
17,isspace() :判斷是否是空格
18,isupper() 判斷是否大寫
19,istitle() :判斷是否首字母大寫
20,join(iterable) :把可迭代對象用字元串進行分割:a.join(『123』)
21,ljust(width,fillchar);rjust() :左對齊右對齊
22, upper() :將字元串改為大寫
23,split(sep=None,maxsplit=-1) :分割一個字元串,被選中字元在字元串中刪除
『ab1cd1efg』.split(『1』) :[『ab』,』cd』,』efg』]
三,字元串格式化:按照規格輸出字元串
format(*args,**kwargs) :args位置參數,kwargs關鍵字參數
『{0:.1f}』.format(123.468) :格式化參數,小數點後保留1位四捨五入
四,字元串操作符%
1,%s :格式化字元串 『abcd%sdef』%』dddd』
2,%d:格式化整數
3,%o格式化無符號八進制
4,%x格式化無符號十六進制
5,%f格式化定點數
6, %e: 科學計數法格式化定點數
7,%g 根據值大小自動選%f,%e
8, %G E X :大寫形式
五,格式化輔助命令:
m.n :m最小總寬度,n小數點後位數:』%12.4f』%23456.789
六,轉義字元:字元串前r避免轉義:r』\nhello\thi』
\n:換行符
\t:橫向製表符
\':'
\":"
\b:退格符
\r:回車
\v:縱向製表符
\f:換頁符
\o,\x:八進制和十六進制
\0:空字元串
Python列表list
一,Python的列表list類型表示的數據:
Python列表在cpython中被解釋為長度可變的數組,用其他對象組成的連續數組。
列表中元素可以是相同或不同的數據類型;
當列表元素增加或刪除時,列表對象自動進行擴展或收縮內存,保證元素之間沒有縫隙,總是連續的。
Python中的列表是一個序列,也是一個容器類型
創建列表:a = []; b = [1,』python』]; c = list(); d = list((1,3,4,5))
支持切片操作list[start,stop,step]
python列表常用方法
1,append添加單個元素:list.append(object); //a.append(『python』)
2,extend添加可迭代對象: list.extend(iterable); //a.extend(『abcde』/[1,2,3])
3,insert 插入元素:list.insert(index,object): 在index下標前插入元素//a.insert(2,』python』)
4,clear 清空所有元素:list.clear() //a.clear()
5,pop 刪除並返回一個元素:list.pop(index) //默認刪除默認一個元素
remove 刪除指定元素:list.remove(v) ,v元素不存在報錯 //a.remove(『c』)
7,count 返回這個值在列表中數量:list.count(value)
8, 淺拷貝一個新列表:list.()
9,sort:排序list.sort(reverse=False/True) :默認升序
排序函數:sorted(list)
10,reverse: 原地翻轉:list.reverse()
11,index(value,star,stop) :指定范圍內該值下標:list.index(2,0,5)
列表元素訪問:
下標訪問:list[1]
For循環遍歷
通過下標修改元素:list[2 ] = 『hello』
列表常用運算符:
1,比較運算符:從第一個元素開始對比
2,+ 拼接一個新列表:l1+ l2
3, 重復操作符:* ,多個列表拼接
成員關系操作符:in/ not in
邏輯運算符:and not or
列表常用的排序方法:
冒泡排序;選擇排序;快速排序;歸並排序
Python元組tuple
一,Python元組tuple數據類型表示的數據:
元組是受到限制的、不可改變的列表;
可以是同構也可以是異構;
元組是序列類型、是可迭代對象,是容器類型。
元組的創建: a = (1,2,3)或a=1,2,3; b = tuple(); c = tuple(iterable)
支持切片操作tuple[start,stop,step]
二,python元組常用方法
1,index(value,star,stop) :指定范圍內該值下標:tuple.index(2,0,5)
2,count(value) :值出現次數
三,支持運算:
1,比較運算符:從第一個元素開始對比
2,+ 拼接一個新元組:l1+ l2
3, 重復操作符:* ,多個元組拼接
4成員關系操作符:in/ not in
邏輯運算符:and not or
四,元組的訪問
下標操作;
For循環遍歷訪問。
Python字典類型
一,Python字典dict表示的數據:{key:value}
可根據關鍵字:鍵快速索引到對應的值;
字典是映射類型,鍵值對一一對應關系,不是序列;
字典元素是無序的;
字典是可迭代對象,是容器類型;
字典的創建:k = {}; k1={『keyword』:object}; k2 = dict();
K3 = dict(mapping); dict=(iterable)
二,字典的訪問:
通過key:k[『key』]
修改key對應的值:K[『key』] = value
For循環遍歷出來的是key;
For循環鍵值對:for I in d.items():
For 循環enumerate: for k,v in enumerate(k1):
In/not in 成員關系查詢鍵不支持查值
三,字典常用方法
get(key,de):獲取值:k.get(key,de) //若不存在則默認輸出de
pop(k,de):刪除一個鍵值對,不存在輸出de,未設置報錯;
keys() :返回字典所有key組成的序列:list(k.keys()) [1,2,3];
values():返回字典所有value組成的序列:list(k.values())
items():返回鍵值對組成的元組為元素的序列:(類set)list(k.items())
update(e):更新字典:e可是字典或兩元素組成的單位元素序列:e=[(5,6),(7,8)];
k.update(e)
clear():清空字典;
popitem()刪除某個鍵值對,若字典為空則報錯
() :淺拷貝
10, fromkeys(iterable,value=None):從可迭代對象創建字典
{}.fromkeys([1,2,3]) -----{1:None,2:None,3:None}
11,setdefault(k,d=None) :若key不存在則生成一個鍵值對
k.setdefault(『keyword』)
Python 集合set
集合表示的數據:
多個元素的無序組合,集合是無序的,集合元素是唯一的;
字典的鍵是由集合實現的;
集合是可迭代對象
集合創建:s = {1,2}; s1 = set(); s2 = set(iterable)
集合元素的訪問:
For 循環將集合所有元素全部訪問一遍,不重復
常用方法:
add(object):s.add(『hi』) 向集合添加一個元素
pop() :彈棧,集合為空則報錯:刪除任意一個元素;
clear():清空集合,返回一個空集合對象;
remove(object):刪除一個元素,不存在和報錯:s.remove(『hi』)
update(集合):更新另一個集合,元素不存在則不更新;
() :淺拷貝
集合的運算:
交集:s1&s2;
差集,補集:s1-s2;
並集:s1|s2;
Issubset():判斷是否是子集:s1.issubset(s2) s1是否s2的集合子集
Issuperset():判斷是否是父集:s1.issuperset()
不可變集合:
Frozenset():返回一個空的不可變集合對象
Frozenset(iterable):
S = frozenset(iterable)
Python序列類型共同特性
一,序列類型共同特性
python序列類型有:str字元串,list列表,tuple元組
都支持下標索引,切片操作;
下標都是從0開始,都可通過下標進行訪問;
擁有相同的操作符
二,支持的函數:
len(obj):返回對象長度;
list(iterable):將可迭代對象轉為列表;
tuple(iterable):將可迭代對象轉為元組;
str(ojb):將任何對象轉為字元串形式;
max(iterable): python3中元素要是同類型,python2中元素可異構:max([『a』,1])
min(iterable):和max類似;
sum(iterable,star=0),求可迭代對象和,默認star為0,元素不能為字元串
sorted(iterable,key=None,reverse=False)
s=[(『a』,3),(『b』,2),(『c』,9)]
sorted(s,key=lambda s:s[1]) //按照數字排序
reversed(sequence):翻轉序列,返回迭代器
enumerate(iterable):返回enumerate對象,其元素都是一個元組(下標,值)
zip(iter1,iter2): zip([1,2],[3,4]) ----[(1,3),(2,4)]
序列類型的切片操作:
Slice:
L[index]; 訪問某個元素;
L[1:4]; 區間
L[star:stop:step]; 設置步長取區間元素