python列表与集合

本文介绍了Python中的列表和集合类型。对列表的修改、删除、添加、复制、排序等操作进行了详细阐述,并通过示例展示了如何求自然数的平方和。接着,解释了集合的定义,强调其无序性和元素唯一性,并列举了如add、update、remove等集合的常用函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.列表类型操作

1.修改列表元素

ls[i]=x #替换列表ls第i项数据为x
ls[i:j]=It  #用列表it替换列表ls中第i项到j项数据(不含第j项)
ls[i:j:k]=It #用列表It替换列表ls中第i项到j项以k为步长的数据(不含第j项)

示例如下:

v=[1,2,3,4]
v[3]="py"
v
[1,2,3,"py"]

2.删除列表元素

del ls[i:j] #删除列表ls第i项到j项数据
del ls[i:j;k]  #删除列表中ls第i项到j项以k为步长的数据
ls.clear()  #删除列表中ls所有元素
ls.pop(i)  #将列表ls中第i项元素取出并删除,省略i指最后一项(i=-1),超出下标并报IndexError错
ls.remove(x)   #删除列表中第一个出现的元素x,无,则报错

示例如下:

ls=["cat","dog","tiger",1024]
del ls[::3]
ls
['dog','tiger']
a=["cat","dog","tiger"]
a.pop(1)
'dog'
a=["cat","dog","tiger","lion"]
a.remove("dog")
a
["cat","tiger","lion"]</
Python中,我们可以使用哈夫曼编码(Huffman Coding)算法来构建哈夫曼树,这是一种自底向上的贪心算法,通常用于数据压缩。以下是创建哈夫曼树的基本骤: 1. **频率统计**:首先,对输入的数据集合中的字符及其出现频率进行计数。 2. **构造初始节点**:将每个字符其频率作为键值对,形成一个个叶子节点,存储在一个优先队列(如Python的`heapq`模块中的最小堆)中。 3. **合并节点**:从队列中取出两个频率最低的节点,组合成一个新的节点,新节点的频率是这两个节点频率之和,并把新节点放回队列顶部。这个过程会一直持续到只剩下一个节点为止。 4. **构建二叉树**:每次取出的两个节点就是新节点的左右子树,直到队列为空,剩下的那个节点就是根节点,形成了完整的哈夫曼树。 5. **生成编码**:从根节点开始,对于每个字符,根据其路径上遇到的是左孩子还是右孩子来确定对应的0或1,这样就得到了该字符的哈夫曼编码。 这里是一个简单的示例,展示如何使用Python实现以上骤: ```python import heapq def huffman_encoding(freqs): # Step 1: Frequency statistics heap = [[freq, [char]] for char, freq in freqs.items()] heapq.heapify(heap) while len(heap) > 1: # Step 2 and 3: Combine nodes lo = heapq.heappop(heap) hi = heapq.heappop(heap) heapq.heappush(heap, [lo[0] + hi[0], lo[1] + hi[1]]) # Step 4: Build the tree root, _ = heapq.heappop(heap) def build_codes(node, code=""): if isinstance(node, list): left_code, right_code = build_codes(node[0], code + "0") right_code, left_code = build_codes(node[1], code + "1") return (left_code, right_code), node[2] else: return code, node _, codes = build_codes(root) return codes # Example usage freqs = {"A": 10, "B": 20, "C": 30} # Replace with your character frequencies encoded_data = huffman_encoding(freqs) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值