列表合并、去重、排序
Problem Description
从键盘输入两个数列,构成两个列表list1、list2,合并这两个列表为list3,将list3去掉重复元素、降序排序后生成list4.
Input Description
输入两个数列,以英文逗号分隔
Output Description
输出列表list1、list2、list3、list4
Sample Input
8,2,55,9,7,6,6 20,7,4,2,1
Sample Output
list1 = [8, 2, 55, 9, 7, 6, 6] list2 = [20, 7, 4, 2, 1] list3 = [8, 2, 55, 9, 7, 6, 6, 20, 7, 4, 2, 1] list4 = [55, 20, 9, 8, 7, 6, 4, 2, 1]
方法一:
#输入列表
list1 = list(map(int,input().split(',')))
list2 = list(map(int,input().split(',')))
#合并列表1,2
list3 = list1 + list2
#将列表转换为集合,然后再转回列表来删除重复元素
list4 = list(set(list3))
#输出列表
print(f"list1 = {list1}")
print(f"list2 = {list2}")
print(f"list3 = {list3}")
print(f"list4 = {list4[::-1]}")
#通过使用切片,逆序输出
方法2:
list1 = list(map(int,input().split(',')))
list2 = list(map(int,input().split(',')))
#合并两个列表
list3 = list1 + list2
#创建空列表
list4 = []
#遍历 list3 中的每个元素 l1,并检查它是否已经在 list4 中。如果 l1 不在 list4 中,就将其添加到 list4。这样,list4 最终将包含 list3 中的所有不重复元素
for l1 in list3:
if l1 not in list4:
list4.append(l1)
# 对去重后的列表进行排序
list4.sort(reverse=True)
list4 = list(set(list3))
#根据 list4 中的每个元素在 list3 中首次出现的索引来对 list4 进行排序
list4.sort(key=list3.index)
#输出
print(f"list1 = {list1}")
print(f"list2 = {list2}")
print(f"list3 = {list3}")
print(f"list4 = {list4}")
知识点总结
在Python中,有多种方法可以删除列表中的重复元素。以下是一些常见的方法:
- 使用集合(set)来删除重复元素:
集合(set)是一个无序且不包含重复元素的集合。你可以通过将列表转换为集合,然后再转回列表来删除重复元素。但是,请注意,这种方法会丢失原始列表中的顺序。
python复制代码
my_list = [1, 2, 2, 3, 4, 4, 5] | |
my_list = list(set(my_list)) | |
print(my_list) # 输出:[1, 2, 3, 4, 5] |
2.使用列表推导式(list comprehension)和 if not x in
语句:
这种方法会保留原始列表中的顺序,但性能可能不如其他方法,特别是当列表很大时。
python复制代码
my_list = [1, 2, 2, 3, 4, 4, 5] | |
my_list = [x for i, x in enumerate(my_list) if my_list.index(x) == i] | |
print(my_list) # 输出:[1, 2, 3, 4, 5] |
3.使用 itertools.groupby
:
这种方法也会保留原始列表中的顺序,但需要先对列表进行排序。
python复制代码
from itertools import groupby | |
my_list = [1, 2, 2, 3, 4, 4, 5] | |
my_list.sort() | |
my_list = [key for key, group in groupby(my_list)] | |
print(my_list) # 输出:[1, 2, 3, 4, 5] |
4.使用字典(dict)的键来删除重复元素:
字典的键是唯一的,因此你也可以利用这一特性来删除列表中的重复元素。这种方法也会保留原始列表中的顺序。
python复制代码
my_list = [1, 2, 2, 3, 4, 4, 5] | |
my_dict = {} | |
my_list = [my_dict.setdefault(x, x) for x in my_list] | |
print(my_list) # 输出:[1, 2, 3, 4, 5] |
每种方法都有其优点和缺点,你可以根据你的具体需求来选择最合适的方法。
在Python中,有多种方法可以将列表逆序输出。以下是一些常见的方法:
- 使用切片(slicing)操作:
你可以使用切片操作 [::-1]
来获取列表的逆序副本,然后输出这个副本。
python复制代码
2.使用 reversed()
函数:
reversed()
函数返回一个逆序的迭代器,你可以将其转换为列表或直接在循环中使用。
python复制代码
my_list = [1, 2, 3, 4, 5] | |
reversed_list = list(reversed(my_list)) | |
print(reversed_list) # 输出:[5, 4, 3, 2, 1] |
3.使用循环从后往前遍历:
你也可以通过索引从列表的末尾开始往前遍历,从而逆序输出列表的元素。
python复制代码
my_list = [1, 2, 3, 4, 5] | |
for i in range(len(my_list) - 1, -1, -1): | |
print(my_list[i]) | |
# 输出: | |
# 5 | |
# 4 | |
# 3 | |
# 2 | |
# 1 |
4.在输出时直接使用切片:
如果你只是想打印出逆序的列表,而不需要保存逆序后的列表,你可以直接在 print()
函数中使用切片。
python复制代码
my_list = [1, 2, 3, 4, 5] | |
print(my_list[::-1]) # 输出:[5, 4, 3, 2, 1] |
每种方法都有其适用的场景,你可以根据具体需求选择最合适的方法。如果你只需要查看逆序的列表,使用切片直接打印可能是最简单直接的方式。如果你需要逆序后的列表进行后续操作,那么使用切片操作或 reversed()
函数转换为列表可能是更好的选择。