列表new_list=[['2020-03-27','都江堰景区',5,'不放假阿胶世界小姐'],['2021-02-12','都江堰景区',4,'都不叫我看对你好的'],['2020-04-1','都江堰景区',3,'活动结束酷暑难耐'],['2020-03-11','都江堰景区',1,'等你我肯定你打不打健康打卡']] 选取new_list[1]的年份和月份根据new_list[2]的分值画散点图
时间: 2023-08-06 11:19:11 浏览: 36
好的,根据您的要求,我可以给您提供一个简单的Python代码来绘制散点图。请确保您已经安装了Matplotlib库。
```python
import matplotlib.pyplot as plt
# 选取new_list[1]的年份和月份以及分值
date = new_list[1][0]
score = new_list[1][2]
# 将日期字符串分割成年份和月份
year, month, _ = date.split('-')
# 创建散点图
fig, ax = plt.subplots()
ax.scatter(int(year), score)
# 设置图表标题和坐标轴标签
ax.set_title('Score by Year and Month')
ax.set_xlabel('Year')
ax.set_ylabel('Score')
# 显示图表
plt.show()
```
这段代码将选取`new_list`列表中第二个元素的日期和分数信息,并将日期字符串分割为年份和月份。然后,它将创建一个散点图,其中x轴是年份,y轴是分数。您可以根据需要修改图表的标题和坐标轴标签。
相关问题
Tomact_CVE-2020-1938漏洞复现
要复现Tomact_CVE-2020-1938漏洞,可以按照以下步骤进行操作:
1. 下载POC:可以使用以下命令下载POC文件:
git clone https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read/
2. 在攻击机上搭建环境:确保攻击机上已经安装了Tomcat服务器,并且版本在3.4.3以下,可以使用以下命令下载并安装Tomcat 3.4.3版本:
git clone https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read/
3. 配置Tomcat服务器:在Tomcat安装目录下,找到server.xml文件,在<Connector>标签中添加以下内容:
protocol="org.apache.coyote.ajp.AjpNio2Protocol" secretRequired="false"
4. 启动Tomcat服务器:在Tomcat安装目录下运行启动脚本,如./catalina.sh run
5. 复现漏洞:使用以下命令触发漏洞复现:
python3 file_include.py -u http://目标IP:目标端口/ -p /WEB-INF/web.xml
以上步骤可以帮助你复现Tomact_CVE-2020-1938漏洞。请注意,在进行漏洞复现时务必遵守道德规范,并获得合法授权进行测试。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [CVE-2020-1938 漏洞复现](https://blog.csdn.net/weixin_48799157/article/details/124889366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [CVE-2020-1938 Tomcat文件包含漏洞复现](https://blog.csdn.net/qq_49279082/article/details/129018726)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
帮我优化:int add_node(void *vaule, int len) { LIST_NODE *new_node = NULL; LIST_NODE *tmp = NULL; new_node->value = calloc(1,len); if (new_node->value == NULL){ printf("calloc failed\n"); return -1; } memcpy(new_node, vaule, len); tmp = g_list.head->next; g_list.head->next = new_node; new_node->next = tmp; g_list.node_nums++; return 0; }
在这段代码中,有几个优化的地方可以考虑:
1. 添加节点前应先检查内存分配的结果。在 `new_node` 的定义后,应该分配内存给 `new_node`,而不是在赋值时分配。这样可以避免使用未初始化的指针 `new_node`。
2. 在分配内存给 `value` 之后,应该检查 `calloc` 的返回值,以确保内存分配成功。如果分配失败,应该释放已分配的内存并返回错误。
3. 在调用 `memcpy` 之前,应该将 `vaule` 转换为正确的指针类型(例如 `void*` 转换为 `char*`),以确保正确的内存拷贝。
4. 在添加新节点时,不需要将 `g_list.head->next` 赋值给 `tmp`,然后再将 `new_node` 赋值给 `g_list.head->next`。可以直接将 `new_node` 的 `next` 指针指向 `g_list.head->next`,然后将 `new_node` 赋值给 `g_list.head->next`。
下面是优化后的代码:
```c
int add_node(void *value, int len) {
LIST_NODE *new_node = calloc(1, sizeof(LIST_NODE));
if (new_node == NULL) {
printf("calloc failed\n");
return -1;
}
new_node->value = calloc(1, len);
if (new_node->value == NULL) {
printf("calloc failed\n");
free(new_node);
return -1;
}
memcpy(new_node->value, value, len);
new_node->next = g_list.head->next;
g_list.head->next = new_node;
g_list.node_nums++;
return 0;
}
```
请注意,我假设了存在一个名为 `g_list` 的全局变量,其中包含一个头节点 `head` 和一个节点计数器 `node_nums`。如果您的代码中不存在这些变量,请相应地调整代码。