python之列表、元组、字符串、集合、字典总结

列表、元组、字符串、集合、字典总结

这周学习了列表、元组、字符串、集合、字典,五种容器类型,下面对五种容器类型做一个简单的总结,使人更好的去认识他们。

在python中的表现形式

列表(list)----------->[元素,元素,元素 ]
元组(tuple)-------->(元素,元素,元素)
字符串(str)----------> ‘字符数据’
集合(set)---------->{元素,元素,元素,元素}
字典(dict)---------->{键:值,键:值}
举例

# 列表
list1 = []     # 表示空列表
list2 = [1, 2, 3, 4]    # 定义列表用[],里面的元素可以是任何类型的数据
# 元组
tuple1 = ('apple', 'banana', 'grape')  # 定义元组用()
tuple2 = (100,)   # 一元组要加逗号
tuple3 = ()      # 空元组
print(tuple3, type(tuple3))
# 字符串
str1 = 'hello, world'  # 定义字符串,需要用 ' ', " ",或者是 """ """ 将单个字符或多个字符括起来
# 集合
set1 = {1, 2, 3, 4}  # 定义集合用{}
set2 = set()  # 创建空集合
# 字典
student1 = {         # 由键和值组成,键和值用 :隔开
    'id': 1010,
    'name': '小明',
    'sex': 'True',
    'birthday': '2000-1-1'
}

可变性

1:列表字典是可变的,支持增,删,查,改的操作
其中列表支持下标运算.字典通过键找到与之对应的值并进行操作。
集合中的元素是可变的,只支持增,删,查,并且它是无序的不能通过下标来查找元素

2:元组字符串中的元素是不可变的,只支持查的操作。其中元组字符串可以通过切片索引的方式查找元素。

列表 字符串 元组 集合 字典
可变 不可变 不可变 可变,但是不能修改元素 字典是可变的,字典中的键必须是不可变
有序 有序 有序 无序,其中所有的元素都是不重复的 无序,通过键,或者值来进行查找

经常使用的一些方法

排序

经常使用于列表中,字典中也会用到。其中列表可用sortsorted,而字典
只支持sorted

list1 = ['1', '2', '3', '4']
list1.sort(key=int, reverse=True)  # reverse=True由高到低排序,指定排序按照int类型来排
print(list1)

stocks = {
    'AAPL': 191.88,
    'GOOG': 1186.96,
    'IBM': 149.24,
    'ORCL': 48.44,
    'ACN': 166.89,
    'FB': 208.09,
    'SYMC': 21.29
}
x = sorted(stocks, key=stocks.get, reverse=True)  # 通过字典的键的值来从大到小排序,最后输出的是字典的键
print(x)

如果不指定key,字典默认对字典的键进行排序.不指定reverse,默认排序为从小到大。

随机抽取和乱序,,求最大值与最小值

random.sample() 对列表进行无放回抽样
random.choices() 对列表进行有放回抽样
choice 函数可以从列表中选择一个元素
shuffle 函数打乱顺序
max()求最大值
min() 求最小值
count() 统计出现的次数
例子
用一个列表保存52张扑克牌,洗牌,按斗地主的发牌方式把牌发给三个玩家,多的3张牌给第一个玩家(地主),把每个玩家手上的牌显示出来

import random
kinds1 = ['♠', '♣', '♥', '♦']
kinds2 = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
cards = [f'{i}{j}' for i in kinds1 for j in kinds2]  # 将数字与花色组合起来
cards.append('大王')
cards.append('小王')
print(cards)
print(len(cards))
random.shuffle(cards)  # 随机打乱牌的顺序
# 嵌套列表(列表中的元素又是列表)
players =[[] for _ in range(3)]  # 创建三个空列表代表三个玩家
for _ in range(17):
    for player in players:
        player.append(cards.pop())  # 将牌取出来
players[0] += cards  # 将剩下三张牌给第一个玩家
# players[0].extend(cards) # 将一个列表的元素合并到另一个列表
for player in players:
    # 对列表的元素进行排序
    player.sort(key=lambda x: x[1])
    for card in player:
        print(card, end=' ')
    print()

例子2
保存5个学生,3门课的成绩

import random

names = ['小黑', '小辉', '小红', '小米', '小明']
courses = ['语文', '数学', '英语']
scores = [[random.randrange(50, 101) for _ in range(len(courses))] for _ in range(5)]
print(scores)
# 求每个同学的平均成绩
for i, name in enumerate(names):
    print(f'{name}同学的平均成绩:{sum(scores[i]) / len(courses):.1f}')
#求每个课程的最高分,最低分
for j, course in enumerate(courses):
    temp = [scores[i][j] for i in range(len(name))]
    print(f'{course}的最高分:{max(temp)}')
    print(f'{course}的最低分:{min(temp)}')

例子3:
输出10行的杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

x = int(input('输入一个数:'))
nums =[[] for _ in range(x)]
for i in range(x):
    nums[i].append(1)
    if i > 0:
        for j in range(1, i):
            nums[i].append(nums[i - 1][j - 1] + nums[i - 1][j])
        nums[i].append(1)
    for num in nums[i]:
        print(num, end='\t')
    print()

结果·:

输入一个数:10
1	
1	1	
1	2	1	
1	3	3	1	
1	4	6	4	1	
1	5	10	10	5	1	
1	6	15	20	15	6	1	
1	7	21	35	35	21	7	1	
1	8	28	56	70	56	28	8	1	
1	9	36	84	126	126	84	36	9	1

方法2

x = int(input('输入一个数:'))
nums = [[0] * x for _ in range(x)]
for i in range(x):
    nums[i][0] = 1
    nums[i][i] = 1

    for j in range(1, i):
        nums[i][j] = nums[i - 1][j - 1] + nums[i - 1][j]

# for i in range(x):
#     for j in range(i + 1):
#         print(nums[i][j], end='\t')
#     print(' ')

for i in range(x):
    for j in range(x - i):
        print(end=' ')
    for k in range(i + 1):
        print(nums[i][k], end=' ')
    print(' ')

结果:

输入一个数:10
          1  
         1 1  
        1 2 1  
       1 3 3 1  
      1 4 6 4 1  
     1 5 10 10 5 1  
    1 6 15 20 15 6 1  
   1 7 21 35 35 21 7 1  
  1 8 28 56 70 56 28 8 1  
 1 9 36 84 126 126 84 36 9 1 

例题3
一个列表中有很多重复元素,写一段代码去掉列表中的重复元素
方法一:

list1 = [1, 2, 3, 2, 3, 4]
list2 = []
for x in list1:
    if x not in list2:
        list2.append(x)
print(list2)

方法二:
将列表转换成集合去重,再变成列表

set1 = set(list1)
list2 = list(set1)
print(list2)

例题四
有一个放整数的列表,找出列表中出现次数最多的元素

# 方法一
d = list1.count(list1[0])
for i in list1:
    if list1.count(i) > d:
        d = list1.count(i)
for x in list1:
    if list1.count(x) == d:
        print(x)
        list1.remove(x)

方法二

items, max_count = [list1[0]], list1.count(list1[0])
for num in list1[1:]:
    if list1.count(num) > max_count:
        items.clear()
        items.append(num)
        max_count = list1.count(num)
    elif list1.count(num) == max_count:
        if num not in items:
            items.append(num)
for x in items:
    print(x)

例题5
生成10组随机验证码(由数字和英文字母构成,长度为4)

import random
import string

list1 = string.ascii_letters + string.digits  
# list = '0123456789abcdefghijklmnopqrstuvwsyzABCDEFGHJIKLMNOPQRSTVUWSYZ'
for _ in range(10):
    x = random.choices(list1, k=4)
    print(''.join(x))

例题六:
有一个放整数的列表,其中有一个整数出现次数超过了半数以上,请找出该元素(考虑效率,不使用嵌套循环)

list1 = [1, 3, 3, 3, 2, 2, 3]
counter, temp = 0, None
for num in list1:
    if counter == 0:
        temp = num
        counter = 1
    else:
        if num == temp:
            counter += 1
        else:
            counter -= 1
print(temp)
"""
过程:
num     1  3  3  3  2  2  3
temp    1  1  3  3  3  3  3
counter 1  0  1  2  1  0  1
"""

例题7
输入一段话,统计每个单词出现的次数

str1 = 'Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.'
str2 = str1.lower()
str2 = str2.replace(',', '').replace('.', '')
str2 = str2.split(' ')
dict2 = {x: 0 for x in str2}
for word in str2:
    dict2[word] += 1
for key, value in dict2.items():
    print(f'{key}出现了{value}次')

你可能感兴趣的:(python,列表,字符串)