Python字符串

1. 字符串概述

  字符串是Python基本數據結構——序列。索引、 切片、 相加、 相乘和成員資格檢查等序列通用操作也適用於字符串

2. 字符串相關術語

2.1 轉義

  讓某個符號不再表示某種含義, 而是表示另外一種含義。

2.2 轉義符

  反斜杠: \

2.3 轉義字符

  轉義字符表示某些字符用常規的方式不能在字符串中表示出來。如 \t、\n等。

2.4 原始字符

  每個字符都是原始含義的字符串,聲明原始字符則在字符串開始加上字母「r」

>>> path = r"D:\python36"
>>> path
'D:\\python36'

2.5 多行字符串

  起止是 3 個單引號或 3 個雙引號的字符串。在 Python 中,「三重引號」 之間的所有引號、 製表符或換行, 都被認為是字符串的一部分。

3. 格式化字符串

  基本思路:對字符串調用方法format,並提供要設置其格式的值。

>>> "The number is {num:f}".format(num=42)
'The number is 42.000000'

4. 字符串常用方法及代碼實踐(源自《Python編程快速上手  讓繁瑣工作自動化》)

# (列表)list_to_str.py
'''
假定有下面這樣的列表:
spam = ['apples', 'bananas', 'tofu', 'cats']
編寫一個函數,它以一個列表值作為參數,返回一個字符串。該字符串包含所有表項,
表項之間以逗號和空格分隔,並在最後一個表項之前插入 and。例如,將前面的 spam 列表傳遞給函數,
將返回'apples, bananas, tofu, and cats'。但你的函數應該能夠處理傳遞給它的任何列表。
'''
# 關鍵是先在列表倒數第二的位置添加'and',再用字符串方法join,','join(seq)合併列表
# 僅能處理該題目,要處理任何列表有待改進

spam = ['apples', 'bananas', 'tofu', 'cats']

def list_to_str(lis):
    lis.insert(-1, 'and')
    lis=(' ').join(lis) # 注意兩個單引號裏面是有個英文空格
    print(lis)
    return lis
    
    
if __name__ == '__main__': 
    list_to_str(spam)

View Code

# (字符串)右對齊打印矩陣.py

'''
編寫一個名為 printTable()的函數, 它接受字符串的列表的列表,將它顯示在組織良好的表格中, 每列右對齊。
假定所有內層列表都包含同樣數目的字符串。例如,該值可能看起來像這樣:
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
你的 printTable()函數將打印出:
  apples Alice  dogs
 oranges   Bob  cats
cherries Carol moose
  banana David goose
'''

# 意思是將這個3行4列的嵌套列表中的每列元素(縱向),橫向(排列)換行打印出來
# 因為要求打印出來的每列字符(即每個列表中的字符)右對齊,所以要先確定每個列表中的最長字符串長度,再調用右對齊rjust()方法並傳入最長字符串的長度

tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]


def printTable(strlist):
    colWidth = [0]*len(strlist)   # 初始化「列寬度」,col即column為列的意思
    for i in range(len(strlist)): # 先迭代矩陣長度,即迭代每個列表
        for j in range(len(strlist[0])): # 迭代每列,即迭代每個列表長度,此處可用strlist[0],因為是一個矩陣
            if len(strlist[i][j]) > colWidth[i]:    # strlist[i][j] 即先[1][1],[1][2],[1][3],[1][4],再[2][1]、[2][2]、[2][3]、[2][4],即逐行比較
                   colWidth[i] = len(tableData[i][j])
    count = 0
    for i in range(len(strlist[0])): # 先迭代每個列表的元素個數,即將打印出來的行數,
        for j in range(len(strlist)): # 再迭代矩陣長度,即將打印出來的列數
                   print(strlist[j][i].rjust(colWidth[j]), end=' ') #仍然取決先迭代的i,即先將先跌代的標量按順序先迭代完 strlist[j][i] 即先打印[1][1],[2][1],[3][1]再[1][2]、[2][2],[3][2]即橫向打印列
                   count+=1
                   if count%len(strlist) == 0:
                       print('')
                                         

if __name__ == '__main__':                                          
    printTable(tableData)