【Python3学习笔记】week2.数据结构

# list
# 定义list
a = []
a = [1, 2, 3, 4]
# 长度
print(len(a))
# 强制类型转换
str1 = "abcd"
print(list(str1))
"".join(list(str1))  # 转换回去
print(str1)
# 相加
print([1] + [1])
a = ['test']
b = ['extend']
a.extend(b)
print(a)
# 相乘(本质在复制
print([1] * 5)
# 添加元素(改变list本身,没有返回值,不能写list1=list1.append(1)
list1 = []
list1.append(1)
print(list1)
# 插入元素
list1.insert(0, 'insert')
print(list1)
# in
list1 = [1, 2, 3, 4]
if 1 in list1:
    print('1 is in list1')
# for循环
list1 = ["a", "b", "c", "d", "e"]
for item in list1:
    print(item)
for index in range(len(list1)):
    print(index, list1[index])
for index, item in enumerate(list1):
    print(index, item)
# 索引
list1 = [1, 2, 3, 4, 5]
print(list1[2])
print(list1[-2])
print(list1[1:])  # 左闭右开,,不填到边界
# 反转
print(list1[::-1])
print(list1[::2])  # 每隔一个取
print(list1[::-2])  # 每隔一个取并且反转
print(list1[0:3][::-1])  # 部分反转
print(list(reversed(list1)))
list1.reverse()
print(list1)
# 排序
list1 = [1, 4, 6, 2, 3, 5]
print(sorted(list1))  # 返回排序后,不改变本身
print(list1.sort())  # 改变本身,无返回值
print(list1)
# 反向排序
print('反向排序的结果是', sorted(list1, reverse=True))
list1.sort(reverse=True)
print('反向排序的结果是', list1)
# 按照单词长度排序
list2 = ['hellow', 'world', 'i', 'have']
list2.sort(key=len)
print(list2)
# 删除
del list1[0]
print(list1)
list1.remove(2)  # remove写的是内容不是索引,删除出现的第一个该内容
print(list1)
list1.pop()  # 从最后一个开始删除
print(list1)
list1.pop(0)
print(list1)  # 从开头开始删除
list1.clear()  # 清除
print(list1)
# 计数
list1 = [1, 1, 2, 3, 4]
print(list1.count(1))
# 找到第一个的位置
print(list1.index(2))
# 总和
print(sum(list1))
# all返回列表内元素布尔值是否都为True,any只要有一个是True
print(all(['', 'a', 1]))
print(any(['', 'a', 1]))
# 列表生成式
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)
# 解包操作
list1 = [1, 2, 3, 4]
print(*list1)
# list of list
list1 = [[1, 2, 3], [3, 4, 5], [5, 6, 7]]
print(len(list1))
print(list1[0])
print(list1[0][0])
total = 0
for num_lists in list1:
    for num_list in num_lists:
        total += num_list
print('the total of list in list is:', total)
# 字符串也可以视作list,可以进行操作,但不可以被重写
# 分割字符串
y = 'The cat sat on the mat'
print(y.split(' '))
z = '12:30:45'
print(z.split(':'))
# 文件与list
# 逐行读取
with open('myfile', 'w') as file:
    file.write('Line 1: Some content\n')
    file.write('Line 2: ...\n')
    file.write('Line 3: Last line')

with open('myfile', 'r') as file:
    content = file.readlines()

print(content)
# 逐行写入
lines = ['Line 1: The cat\n', 'Line 2: sat on\n', 'Line 3:', ' the mat']  # 注意加上换行符

with open('myfile', 'w') as file:
    file.writelines(lines)

# Open the file to see the result
with open('myfile', 'r') as file:
    content = file.readlines()
    for line in content:  # for循环迭代每一行
        print(line)

# tuple元组(定义之后不可修改)
# 定义
tuple1 = tuple([1, 2])
tuple2 = tuple("abcd")
print(tuple1, tuple2)
tuple1 = (1, 2, 3)
tuple2 = 1, 2, 3, 4  # 简写版定义方式
print(tuple1, tuple2)
# 可以进行和list相同的操作

# set集合(无序不重复)
# 创建集合(使用{}或者set()函数,但{}是空字典)
set1 = set()
set1 = {1, 2, 3, 4}
set2 = {1, 2, 3, 4, 5, 6, 7, 8}
set3 = set('abcd')
# 运算
print(1 in set1)  # in
print(set2 - set1)  # 2有1没有
print(set2 | set1)  # 并集
print(set1 & set2)  # 交集
# 长度
print(len(set1))
# 添加
set1.add(5)
print(set1)
# 删除(如果不存在,remove会异常,discard不会)
set1.remove(1)  # 特定
set1.discard(2)  # 特定
set1.pop()  # 左侧
print(set1)
set1.clear()  # 清除所有
print(set1)
# 求交集
set1 = {1, 2}
set2 = {1, 2, 3}
print(set1.intersection(set2))  # 不改变自身
set1.intersection_update(set2)  # 会改变自身
print(set1)
# 应用:无序不重复
# 判断一个字符串有无重复元素
str1 = "abbbcde"
if len(str1) == len(set(str1)):
    print("no replicated")
else:
    print("yes")

# dict字典
# 定义
dict1 = {}  # 空字典
dict1 = {1: 2}
dict2 = {
    1: 'a',
    "3": 100,
    (1, 3): [1, 2, 3, 4]
}
print(dict2)
'''
key value
key=数字,字符串,tuple
value:任意
'''
# 索引
print(dict2['3'])
# 删除
del dict2['3']
print(dict2)
# 求长度
print(len(dict2))
# 求所有keys
print(dict2.keys())
# 求values
print(dict2.values())
# 求items(key,value)
print(dict2.items())
# 列出key values的循环语句
for key in dict2.keys():
    value = dict2[key]
    print(key, '======', value)
for key, value in dict2.items():
    print(key, '+++++', value)
# 应用:统计出现次数
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
results = {}
for item in numbers:
    if item in results:
        results[item] = results[item] + 1
    else:
        results[item] = 1
print(results)
# 使用count的方法(重复遍历,复杂度更高)
counter = {}
for num in numbers:
    counter[num] = numbers.count(num)
print(counter)
# 使用Counter
from collections import Counter

counter = Counter(numbers)
print(counter)
# 找到出现最多的元素
max_value = max(counter.values())
for k, v in counter.items():
    if v == max_value:
        print(k, v)
# defaultdict:对于不存在的key,返回一个默认值0/空,同时在字典里添加
from collections import defaultdict

dict1 = defaultdict(int)
dict2 = defaultdict(list)
dict3 = defaultdict(str)
print(dict1[1], dict2[1], dict3[1])
# 排序输出
numbers = [6, 6, 6, 6, 1, 1, 1, 1, 2, 2, 3, 3, 3]
counter = defaultdict(int)
for num in numbers:
    counter[num] = counter[num] + 1

max_value = max(counter.values())
for k in sorted(counter.keys()):  # sorted:排序
    v = counter[k]
    if v == max_value:
        print(k, v)

# 例题
text = ['hello world', 'I love you', 'hello hamadi', 'yes ok']
'''
这是一个list
要输出:按照单词出现次数从大到小排序,出现次数相同的,按单词长度从大到小排序
'''
from collections import defaultdict

counter = defaultdict(list)
for words in text:
    for word in words.split():  # 按空格分割
        counter[len(word)].append(word)
print(counter)
# 至此完成长度归类

# 类型转换
x = [1, 1, 1, 2, 3, 4, 5]
print(tuple(x))
print(set(x))

x = {1, 2, 3}
print(list(x))
print(tuple(x))

x = (1, 2, 3)
print(list(x))
print(set(x))

scores = {
    'Alice': 0,
    'Bob': 1,
    'Eve': 2,
    'Mallory': 3,
}

# Using the list() function will yield only keys
print(list(scores))

# Using the list() function on .items will yield the tuples
print(list(scores.items()))

# A list of tuples can also be converted to a dictionary
scores = [(1, 'A'), (2, 'B')]
scores_dict = dict(scores)

print(type(scores))
print(type(scores_dict))
print(scores_dict)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值