pyCharm oj 习题 列表合并、去重、排序

列表合并、去重、排序

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中,有多种方法可以删除列表中的重复元素。以下是一些常见的方法:

  1. 使用集合(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中,有多种方法可以将列表逆序输出。以下是一些常见的方法:

  1. 使用切片(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() 函数转换为列表可能是更好的选择。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值