python(2)--列表和元组

python(2)--列表和元组

序列

>>> person1 = ['Tom',100]
>>> person2 = ['Jerry',100]
>>> datas = [person1,person2]
>>> datas
[['Tom', 100], ['Jerry', 100]]

索引

【0~n-1】

>>> str = 'hello'
>>> str[0]
'h'
>>> str[-1]
'o'
def main():
    months = [
        'January',
        'February',
        'March',
        'April',
        'May',
        'June',
        'July',
        'August',
        'September',
        'October',
        'November',
        'December'
    ]

    endings = ['st','nd','rd'] + 17 * ['th'] \
            + ['st','nd','rd'] + 7 * ['th'] \
            + ['st']

    year = input('Year: ')
    month = input('Month(1-12): ')
    day = input('Day(1-31): ')

    month_num = int(month)
    day_num = int(day)

    month_name = months[month_num - 1]
    ordinal = day + endings[day_num - 1]

    print(month_name + ' ' + ordinal + ', ' + year)


if __name__ == '__main__':
    main()

切片

取某个范围的值

>>> nums = [1,2,3,4,5,6,7,8,9,10]
# 取 [n,m)区间的元素
>>> nums[3:6]
[4, 5, 6]
# 倒序取元素
>>> nums[-3:]
[8, 9, 10]
# nums[0:2]
>>> nums[:2]
[1, 2]
# 复制整个序列

设置步长

# 如果显式指定步长步长不能为0
# 设置步长为n,则元素间间隔n-1个元素 
>>> nums[0:10:2]
[1, 3, 5, 7, 9]
# 步长为负数表示从右向左提取元素
>>> nums[::-2]
[10, 8, 6, 4, 2]

序列运算

# 加法 拼接两个相同类型的序列
>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
# 乘法 构造一个新的序列
>>> 'hello' * 3
'hellohellohello'
>>> [12] * 4
[12, 12, 12, 12]

# None 空列表初始化
>>> seq = [None] * 5
>>> seq
[None, None, None, None, None]
def main():
    strs = input("strs: ")

    screen_width = 80
    text_width = len(strs)
    box_width = text_width + 6
    left_margin = (screen_width - box_width) // 2

    print()
    print(' ' * left_margin + '+' + '-' * (box_width-2) + "+")
    print(' ' * left_margin + '| ' + ' ' * text_width + ' |')
    print(' ' * left_margin + '| ' + strs + ' |')
    print(' ' * left_margin + '| ' + ' ' * text_width + ' |')
    print(' ' * left_margin + '+' + '-' * (box_width - 2) + "+")
    print()

if __name__ == '__main__':
    main()

成员检查

检查成员是否包含在序列中

# 字符串
>>> permit = 'rw'
>>> 'r' in permit
True
# 序列
>>> users = ['Tom','Alice']
>>> input('user name: ') in users
user name: Tom
True
def main():
    database = [
        ['Tom','123'],
        ['Jerry','456']
    ]

    username = input("username: ")
    password = input("password: ")
    # 简单模拟登陆校验
    if[username,password] in database:
        print('Access system')

if __name__ == '__main__':
    main()

其他序列操作

>>> nums = [15,3,100]
>>> len(nums)
3
>>> min(nums)
3
>>> max(nums)
100
# min max可以直接用于序列实参

列表

列表是可变的

# =将任意序列或者字符串作为list参数
>>> list('hello')
['h', 'e', 'l', 'l', 'o']

修改列表

>>> l = [1,2,3]
>>> l[1] = 1
>>> l
[1, 1, 3]

删除元素

>>> l
[1, 1, 3]
>>> del l[1]
>>> l
[1, 3]

切片赋值

>>> name = list('Alice')
>>> name
['A', 'l', 'i', 'c', 'e']
# 赋值可以修改列表,或者直接替换原有列表
>>> name[3:] = list('ly')
>>> name
['A', 'l', 'i', 'l', 'y']

>>> nums = [1,5]
# 插入新元素
>>> nums[1:1] = [2,3,4]
>>> nums
[1, 2, 3, 4, 5]

[1, 2, 3, 4, 5]
>>> nums[1:4] = []
>>> nums
[1, 5]

其他相关方法

# 在末尾附加元素 append()
>>> lst = [1,2,3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]

# 拷贝列表 lst2关联到的是lst的副本
# lst2 = lst常规复制指向的是同一列表
>>> lst
[1, 2, 3, 4]
>>> lst2 = lst.copy()
>>> lst2[3] = 5
>>> lst2
[1, 2, 3, 5]
>>> lst
[1, 2, 3, 4]

# 清空列表 clear()
[1, 2, 3, 4]
>>> lst.clear()
>>> lst
[]


# 统计元素在列表中的出现次数
>>> x = [[1,2],1,1,[2,1,[1,2]]]
>>> x.count(1)
2
>>> x.count([1,2])
1

拼接两个list
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

>>> c = [7,8,9]
# +拼接返回的是一个新数组,效率比extend低 b = b + c
>>> b + c
[4, 5, 6, 7, 8, 9]
>>> b
[4, 5, 6]

#返回查找列表中的值第一次出现的位置
>>> hello = ['hello','say','hi']
>>> hello.index('hi')
2

# 在某个元素后插入一个元素
>>> numbers = [1,2,3]
>>> numbers.insert(2,'seven')
>>> numbers
[1, 2, 'seven', 3]

# 类似于栈的后进先出操作
>>> x = [1,2,3]
>>> x.pop()
3
>>> x
[1, 2]
>>> 
# 指定弹出位置
>>> x.pop(0)
1
>>> x
[2]
>>> 

# 类似栈的push()操作
>>> x
[2]
>>> x.append(x.pop())
>>> x
[2]

# 移除一个元素
>>> x = ['I','am','hero']
>>> x.remove('I')
>>> x
['am', 'hero']

# 反转列表
>>> x = [1,2,3]
>>> x.reverse();
>>> x
[3, 2, 1]
>>> 

排序

# sort() 升序排序,对原来的序列排序
>>> x = [5,3,8,2,1]
>>> x.sort()
>>> x
[1, 2, 3, 5, 8]

>>> x = [5,3,8,2,1]
>>> y = x.copy()
>>> y.sort()
>>> y
[1, 2, 3, 5, 8]
>>> x
[5, 3, 8, 2, 1]

# sorted() 排序,返回一个副本
>>> x = [5,3,8,2,1]
>>> y = sorted(x)
>>> y
[1, 2, 3, 5, 8]
>>> x
[5, 3, 8, 2, 1]

# 指定排序条件
>>> x = ['aa','a','aaaaa']
# 按元素条件
>>> x.sort(key=len)
>>> x
['a', 'aa', 'aaaaa']

>>> x = [4,6,2,1,7,9]
# 逆序
>>> x.sort(reverse=True)
>>> x
[9, 7, 6, 4, 2, 1]

元组

不可变的唯一序列
在映射中,元组作为键值;
元组访问方式和列表相同;
内置的函数和方法会返回元组;
元组的切片仍然是元组;
不要试图修改元组。

>>> 1,2,3
(1, 2, 3)
# 常规创建元组的方式
>>> (4,5,6)
(4, 5, 6)
# 单值元组,一定要加上,
>>> 42,
(42,)
#空元组
>>> ()
()

>>> 3 * (20 + 2,)
(22, 22, 22)

# 将一个list转换为一个元组
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple('abc')
('a', 'b', 'c')

posted @ 2020-08-09 08:22  Dave-Mo  阅读(35)  评论(0)    收藏  举报