首页 > 其他分享 >pyCharm oj 习题 列表合并、去重、排序

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

时间:2024-03-16 16:29:22浏览次数:25  
标签:oj list4 list list3 列表 print pyCharm 习题 my

列表合并、去重、排序

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

标签:oj,list4,list,list3,列表,print,pyCharm,习题,my
From: https://blog.csdn.net/weixin_73793168/article/details/136760119

相关文章

  • [bzoj2120]数颜色/维护队列 (分块)
    数颜色/维护队列[做题笔记]此生第一道不贺题解\(AC\)的分块蓝题!!!题目描述墨墨@hs_mo购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令:\(Q\L\R\)代表询问你从第\(L\)支画笔到第\(R\)支画笔中共有几种不同颜色的......
  • 线性表章节课后习题答案集锦
    目录2.52.62.72.82.92.102.112.122.132.5/*要比较两个单词在字典中的顺序,可以逐个比较它们的字符。首先比较两个单词的第一个字符,如果相同,则继续比较下一个字符,直到找到不同的字符或者某个单词比较完毕。比较时,可以利用ASCII码进行比较,因为字母在ASCII码中是按顺......
  • LibreOJ 3591 「USACO 2018.02 Platinum」Cow Gymnasts
    以\(0\)为初始下标。考虑到这个平台之间的转移不是很好处理,于是考虑换个角度,考虑每个高度。这里定义高度为\(i\)的奶牛就是下一次操作要走\(i\)步的奶牛。然后考虑去分析合法序列的性质。性质\(1\):高度为\(x\)的奶牛在移动后的高度依然为\(x\),即这个过程可以看作每......
  • LibreOJ 4114 「联合省选 2024」迷宫守卫
    因为最后的比较方式是字典序,可以明确肯定是贪心的先让第一个数尽量大,然后是第二个数尽量大,以此类推。考虑到如果选出了第一个数,那么按照其\(\text{dfs}\)的方式,相当于是把根到这个树的链删掉了,变成了许多颗子树,然后在按照\(\text{dfs}\)遍历这几个子树的顺序依次在子树中类似......
  • 网络流建模之拆点,原理详解,OJ练习
    一、网络流建模之拆点1.1问题引入现有工厂s,仓库t,中转站若干,s到中转站有若干道路,中转站到仓库有道路若干,工厂要向仓库运输一定的货物,每条道路都有最大运输量限制,问最大运货量。1.2转化为网络流问题显然上述问题我们可以轻松的建模转化为网络流问题该流网络的最大流就......
  • Pycharm 中 virtualenv、pipenv、conda 虚拟环境的用法
    文章目录前言虚拟环境的通俗介绍虚拟环境和非虚拟环境该怎么选?通过Virtualenv方式创建虚拟环境通过Pipenv方式创建虚拟环境通过Conda方式创建虚拟环境 前言在网上找了好一些资料,发现介绍Pycharm虚拟环境的不多,查了一些资料,并做个总结。本文主要是介绍Pyc......
  • csproj技巧
    1、在项目中我们经常写string?Message{get;set;}明明是引用类型,它底下还是会出现波浪线,我们可以打开csproj找到Nullable将它改为disable,或者删除,它默认是disable<Nullable>disable</Nullable>2、我们的WPF中可能会使用到Winform的类库,添加UseWindowsForms,一定要写在UseWPF......
  • javabean:VO和POJO的区别?
    实体类都是JavaBean的一种 实际上没区别 功能都一样 使用的时候区别(VO一般在命名结尾有大写VO 以做区别)参考:https://blog.csdn.net/huang_ftpjh/article/details/90232922关于java的几种对象(PO,VO,DAO,BO,POJO,DTO)解释摘抄参考2:https://blog.csdn.net/weixin_6938139......
  • 55 人见人爱A-B 东华oj
    1.问题描述A和B是两个集合,A-B求的是两个集合的差,就是做集合的减法运算。2.输入说明输入数据包含T个测试实例。首先输入数字T,然后输入T组测试数据,每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素......
  • 蓝桥练习题-K倍区间
    16.k倍区间-蓝桥云课(lanqiao.cn)首先,看到这个题,想到暴力求解,但显然,数据过大,暴力法过不了;然后看到了一个办法:对所有元素的前缀和取K的模,若s[i],s[j]相同,则在j-1到i的区间内,区间和为K的倍数。C++代码:#include<iostream>#include<queue>usingnamespacestd;ty......