超详细的列表(list)

列表

1、概念

列表如同字符串类型一样,属于有序序列类型,每个元素按照顺序编号存取的,就像其他程序设计语言中的数组,但数组通常存储相同数据类型的元素,而列表可以存储不同类型的元素,并且长度是可变的。(由一系列变量组成的可变序列容器)

2、列表常见操作

2.1列表的创建

(1)通过[]建立列表
	通过“[]”内不带数据的方式将产生空列表;
	lst = [] #创建一个空列表
	lst = ["张三", "李四", "王五"]  #创建一个带数据的列表
(2)通过list建立列表
	lst = list() # 创建一个空列表
	lst = list("hello") #将其他序列转换为列表,()中必须是序列

2.2添加元素

(1)追加(在末尾追加)
	lst.append("王二")
(2)插入(在指定位置添加)
   lst.insert(1,True)

2.3删除元素

(1)根据元素删除
  lst.remove("王二")
(2)根据位置删除
  del lst[0]

2.4列表遍历

(1)索引方式

索引方式采用for语句配合range函数完成,range函数根据列表的长度生成所有索引值,其格式:

"""
for i in range(len(L)):
	对L(i)进行处理
"""
lst = list("hello")

for i in range(len(lst)):
    print(lst[i])
(2)枚举方式

枚举方式指将列表中的每项直接取出进行处理,其格式:

"""
    for item in L:
        对item进行处理
"""

lst = list("hello")

for item in lst:
    print(item)

2.5 定位元素,可以进行增删改查

(1)切片–删除
lst = list("hello")

del lst[0:2]
print(lst)

结果

(2)切片–修改
lst = list("hello")

lst[1:2] = ['a', 'b']
print(lst)

结果
通过切片将列表拿出,会重新创建新列表

3、内存

列表的内存图
列表的内存图好比是c语言中的指针数组

练习
"""
    练习1:在控制台录入,西游记中你喜欢的人物,输入空字符串,打印(一行一个)所有人物:
"""

nameList = []
while True:
    name = input('输入你最喜欢的人物:')
    if name == " ":
        for item in nameList:
            print(item)
    else:
        nameList.append(name)
"""
    练习2:在控制台中录入,所有学生成绩
    输入空字符串,打印(一行一个)所有成绩
    打印最高分,打印最低分,打印平均分
"""

scoreList = []

while True:
    score = input("输入学生成绩")
    if score == "":
        for item in scoreList:
            print(item)
        print("Max = %d" % max(scoreList))
        print("min = %d" % min(scoreList))
        print("avg = %d" % (sum(scoreList)/len(scoreList)));
    else:
        scoreList.append(int(score))

"""
    练习3:在控制台中录入,所有学生姓名
    如果姓名重复,则提示”姓名已经存在“,不添加到列表中
    如果录入空字符串,则倒序打印所有学生
"""

studentName = []
while True:
    name = input("输入学生姓名")
    if name == "":
        break
    elif name in studentName:
        print("学生已经存在!\n")
        break
    else:
        studentName.append(name)

for item in studentName[::-1]:
    print(item)

4列表内存图

list01 = ["张无忌", "赵敏"]
list02 = list01

列表内存图

list01 = ["张无忌", "赵敏"]
list02 = list01
list01[0] = "无忌"
print(list02)

内存图

"""
    列表内存图
"""
list01 = ["张无忌", "赵敏"]
list02 = list01
list01 = ["无忌"]
print(list02)

内存图

"""
    列表内存图
"""

list01 = [800, 1000]
list02 = list01[:]
list02[0] = 900
print(list01[0])


内存图

"""
    列表内存图
"""

list01 = [800, [1000, 500]]
list02 = list01
list01[1][0] = 900
print(list02[1][0])


内存图

"""
    列表内存图
"""

list01 = [800, [1000, 500]]
list02 = list01[:]
list01[1][0] = 900
print(list02[1][0])

浅拷贝内存图

5浅拷贝和深拷贝

浅拷贝:复制过程中,只复制一层变量,不会复制深层变量绑定的数据(默认的就是浅拷贝)
深拷贝:复制整个依赖的变量(深拷贝浪费内存)

"""
    深拷贝内存图
"""

import copy
list01 = [800, [1000, 500]]
list02 = copy.deepcopy(list01)
list01[1][0] = 900
print(list02[1][0])

深拷贝

6列表推导式

(1)概念

列表推导式又称为列表解析式,是一种简洁的快速对列表进行遍历、过滤进而达到重组的方法。列表推导式在逻辑商等价于一个循环语句,只是形式更简单

使用简易方法,将可迭代对象转换为列表

(2)格式

[结果表达式 for x in 序列 1 [… for xn in 序列 n if 条件表达式]]

变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]

(3)作用

对序列对象的元素进行遍历、过滤,并以“结果表达式”作为元素形成新的序列。条件表达式可以省略,序列可以是1个或者多个嵌套。
序列一般是列表、元素、集合、和字典,若是字符串作为整体粗粒,即仅有一个元素
注意:最外层[]表示是列表

"""
    列表推导式
"""

# 将list01中所有元素,增加1以后存入list02中
list01 = [1,2,3,4,5,6]
list02 = [item+1 for item in list01]
print(list02)

"""
    列表推导式
"""

# 将list01中大于10的元素,增加1以后存入list02中

list01 = [1, 2, 3, 4, 5, 6, 8, 10, 11]
list02 = [item+1 for item in list01 if item > 10]
print(list02)
"""
    列表推导式
"""

# 使用range生成1-10之间的数字,将数字的平方存入list01中

list01 = [x * x for x in range(1, 11)]
print(list01)

# 将list01中所有的奇数存入list02

list02 = [item for item in list01 if item % 2 == 1]
print(list02)

# 将list01中所有的偶数存入list03
list03 = [item for item in list01 if item % 2 == 0]
print(list03)

# 将list01中所有偶数大于5的数字增加1后存入list04
list04 = [item+1 for item in list01 if item % 2 == 0 and item > 5]
print(list04)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaWeb 实现增删改查(CRUD)的操作通常采用 MVC 的设计模式,即 Model-View-Controller。 Model 是指数据模型,负责数据的存储、读取和处理。View 是指视图,负责数据的展示和交互。Controller 是指控制器,负责处理用户请求和调用 Model 和 View。 下面是一个简单的示例: 1. 创建数据模型 在 Java 中,我们可以使用 POJO(Plain Old Java Object)来表示数据模型。例如,我们可以创建一个 User 类,表示用户信息: ```java public class User { private int id; private String name; private String email; // Getter and Setter methods } ``` 2. 创建 DAO(Data Access Object)类 DAO 类负责与数据库进行交互,提供对数据的增删改查操作。例如,我们可以创建一个 UserDao 类,提供以下方法: ```java public interface UserDao { List<User> list(); // 查询所有用户信息 User get(int id); // 根据 ID 查询用户信息 void add(User user); // 添加用户信息 void update(User user); // 更新用户信息 void delete(int id); // 根据 ID 删除用户信息 } ``` 3. 创建 Service 类 Service 类负责业务逻辑的处理,调用 DAO 类提供的方法来实现对数据的操作。例如,我们可以创建一个 UserService 类,提供以下方法: ```java public class UserService { private UserDao userDao = new UserDaoImpl(); public List<User> list() { return userDao.list(); } public User get(int id) { return userDao.get(id); } public void add(User user) { userDao.add(user); } public void update(User user) { userDao.update(user); } public void delete(int id) { userDao.delete(id); } } ``` 4. 创建控制器 Controller Controller 类负责处理用户请求,调用 Service 类提供的方法来实现对数据的操作。例如,我们可以创建一个 UserController 类,提供以下方法: ```java public class UserController { private UserService userService = new UserService(); public void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<User> userList = userService.list(); request.setAttribute("userList", userList); request.getRequestDispatcher("/user/list.jsp").forward(request, response); } public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User user = new User(); user.setName(request.getParameter("name")); user.setEmail(request.getParameter("email")); userService.add(user); response.sendRedirect(request.getContextPath() + "/user/list"); } public void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); User user = userService.get(id); request.setAttribute("user", user); request.getRequestDispatcher("/user/edit.jsp").forward(request, response); } public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); User user = userService.get(id); user.setName(request.getParameter("name")); user.setEmail(request.getParameter("email")); userService.update(user); response.sendRedirect(request.getContextPath() + "/user/list"); } public void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); userService.delete(id); response.sendRedirect(request.getContextPath() + "/user/list"); } } ``` 5. 创建视图 JSP JSP(JavaServer Pages)负责展示数据和交互,例如,我们可以创建 list.jsp、add.jsp 和 edit.jsp,分别用于显示用户列表、添加用户和编辑用户信息。 ```jsp <!-- list.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>User List</title> </head> <body> <h1>User List</h1> <table border="1"> <tr> <th>ID</th> <th>Name</th> <th>Email</th> <th>Action</th> </tr> <c:forEach var="user" items="${userList}"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.email}</td> <td> <a href="<c:url value='/user/edit?id=${user.id}' />">Edit</a> <a href="<c:url value='/user/delete?id=${user.id}' />">Delete</a> </td> </tr> </c:forEach> </table> <a href="<c:url value='/user/add' />">Add User</a> </body> </html> <!-- add.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Add User</title> </head> <body> <h1>Add User</h1> <form action="<c:url value='/user/add' />" method="post"> Name: <input type="text" name="name" /><br /> Email: <input type="text" name="email" /><br /> <input type="submit" value="Add" /> </form> <a href="<c:url value='/user/list' />">Back to User List</a> </body> </html> <!-- edit.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Edit User</title> </head> <body> <h1>Edit User</h1> <form action="<c:url value='/user/update' />" method="post"> <input type="hidden" name="id" value="${user.id}" /> Name: <input type="text" name="name" value="${user.name}" /><br /> Email: <input type="text" name="email" value="${user.email}" /><br /> <input type="submit" value="Update" /> </form> <a href="<c:url value='/user/list' />">Back to User List</a> </body> </html> ``` 6. 配置 web.xml 在 web.xml 中配置 Servlet 和 JSP,例如: ```xml <servlet> <servlet-name>user</servlet-name> <servlet-class>com.example.UserController</servlet-class> </servlet> <servlet-mapping> <servlet-name>user</servlet-name> <url-pattern>/user/*</url-pattern> </servlet-mapping> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <page-encoding>UTF-8</page-encoding> </jsp-property-group> </jsp-config> ``` 这样,我们就完成了 JavaWeb 中使用 MVC 实现增删改查的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值