添加:
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)