基础数据结构 -- 列表 python + java

本文介绍了Python中列表的添加元素(append和extend)、删除(del与clear的区别)、查找以及排序操作。同时,对比了Python和Java中列表(ArrayList)的异同,包括动态扩容和方法支持。还讨论了如何正确删除多个相同元素,并提供了错误示例及修正方法。最后,文章给出了生成随机整数列表和冒泡排序的示例代码。

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

添加:

list.append(): 添加元素     list.extend(lsit):合并列表

删除:

 注意del和clear()的区别,前者是断掉a变量与在内存池里的值之间的关联,从而找不到a,但b和c依然与[1,2,3]相连,而clear()则是将列表的内容都清除

a = [1,2,3]
b = a
c = a
a.clear()     #[] []
del a
print(b,c)    #[1, 2, 3] [1, 2, 3]

关于删除多个元素

list = ["a","b","a","a","e","f","g"]
list.pop()  #默认删最后一个,也可指定删某一个
print(list)

#若想删除多个相同的元素
#错误示范:
for i in list:
    if i == "a":
        list.remove(i)
print(list)            #显示 ['b', 'a', 'e', 'f']


#正确示范
#方法1:
i = 0
while i < len(list):
    if list[i] == "a":
        list.pop(i)
    else:
        i += 1
print(list)            #显示['b', 'e', 'f', 'g']

# 方法2:
new_list = []
for i in list:
    if i != "a":
        new_list.append(i)
list = new_list
print(list)   #显示['b', 'e', 'f', 'g']

#方法3:
list = ["a","b","a","a","e","f","g"]
for i in list[:]:
    if i == "a":
        list.remove(i)
print(list)    #显示['b', 'e', 'f', 'g']

关于错误示范:由于是在原列表的基础上进行删除,当删除第二个“a”时,列表长度会发生变化,下一个接连的“a”会往前一位,后面的“e”成为了正常情况下检测的下一个元素,所以存在漏测的情况。

而方法三中,由于采取切片的方式,切片是将原列表弄一个副本,当第二个“a”被删除时,下一个“a”的下标值依然被保留,不存在往前移的情况,所以不会漏删。

修改

 查找:

排序:

list = ["a","b","a","a","e","f","g"]

list.reverse()
print(list)    #显示 ['g', 'f', 'e', 'a', 'a', 'b', 'a']  在原地翻转

list.sort()
print(list)      #显示 ['a', 'a', 'a', 'b', 'e', 'f', 'g']  升序
list.sort(reverse = True)
print(list)      #显示 ['g', 'f', 'e', 'b', 'a', 'a', 'a']  降序

注意:在原列表上进行操作

练习:生成8个1~100之间的随机整数,保存在列表中,键盘输入一个1~100之间的整数,将整数插入到排序后的列表中

python

list = []
import random
for i in range(8):
    number = random.randint(1,100)
    list.append(number)
list.sort()
print(list)
inputNum = int(input("请输入一个1~100之间的整数:"))
list.append(inputNum)
list.sort(reverse=True)
print(list)

java

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import java.util.Scanner;

public class test4 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        Random random = new Random();
        for(int i = 1; i < 9; i++){
            int randomNum = random.nextInt(100) + 1;
            list.add(randomNum);
        }
        Collections.sort(list);  //升序
        System.out.println(list);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个1~100的整数:");
        int inputNum = scanner.nextInt();
        list.add(inputNum);
        Collections.sort(list,Collections.reverseOrder());  //降序
        System.out.println(list);
    }
}

说明:

1. 关于ArrayList 和普通的new一个数组有什么区别:

  • ArrayList是java集合框架中的一个类,提供动态数组的实现,可以自动扩容,而new创建的数组需要手动重新创建一个更大的数组
  • ArrayList提供add(),remove(),contains(),indexOf()等方法,方便对元素进行增删改查,而new数组需要手动编写相应的方法完成操作
  • ArrayList支持泛型,可以在编译期间进行类型检查,避免类型转换错误。而使用 new 创建的数组不支持泛型,只能存储一种类型的数据

2. 随机整数主要语法:

import java.util.Random;
Random rand = new Random();
int randomNum = rand.nextInt();
  • 如果想生成指定范围的随机整数,可以在nextInt(int bound)里加入数值,默认取值[0,bound)
  • 如果想取50~100,则可以参考如下。50表示最小可取值,最大值为50+51,但由于51不能取到,所以是50+50=100
  • int randomNum = rand.nextInt(51) + 50;
    

冒泡排序 

java

public class test1 {
    public static void main(String[] args) {
        int Array[] = {5,8,0,-1,10};
        for (int i = 0; i < Array.length -1; i++) {
            for (int j = 0; j < Array.length - 1 - i; j++) {
                if(Array[j] > Array[j + 1]){
                    int temp = 0;
                    temp = Array[j + 1];
                    Array[j + 1] = Array[j];
                    Array[j] = temp;
                }

            }
        }
        for (int i = 0; i < Array.length; i++) {
            System.out.print(Array[i] + "\t");
        }
    }
}

python

list = [5,8,0,-1,10]
for i in range(len(list) - 1):
    for j in range(len(list) - 1 - i):
        if list[j] > list[j + 1]:
            temp = 0
            temp = list[j + 1]
            list[j+1] = list[j]
            list[j] = temp
print(list)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值