「译」在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?...

 

问题

众所周知,在 python 中,+ 运算符可以使用在列表上,+ 运算符只需要第二个操作数是可迭代的(原文:iterable。@justjavac),那么 + 显然可以运算在 "ha" 上。

代码如下:

>>> x = []
>>> x += "ha"
>>> x
['h', 'a']

>>> x = x + "ha"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

解答

当我们在列表 list 上使用 += 的时候,其实相当于调用函数 extend(),而不是使用的 +。

  • 你可以在一个可迭代(iterable)对象上调用 extend()。
    • 但是,当您使用 + 时,另一个操作数必须是列表(list)。

为什么 python 会如此诡异,也许是出于性能方面的考虑。 调用 + 时,将会创建一个新的对象,并复制里面的所有内容。但是当调用 extend() 函数时,将可以使用现有的空间。

这样就会产生另一个副作用:如果你写 X += Y,在其他对列表的引用(reference)中,会看到变化;但如果你使用 X = X + Y,就不会。

下面的代码说明了这一点:

>>> x = ['a','b']
>>> y = ['c', d']
>>> z = x
>>> x += y
>>> z
['a', 'b', 'c', 'd']    // z 也发生了变化

>>> x = ['a','b']
>>> y = ['c', d']
>>> z = x
>>> x = x + y
>>> z
['a', 'b']  // z 函数原始值

参考文献

Python source code for list.

python:+= 的源代码:

static PyObject *
list_inplace_concat(PyListObject *self, PyObject *other)
{
    PyObject *result;

    result = listextend(self, other);
    if (result == NULL)
        return result;
    Py_DECREF(result);
    Py_INCREF(self);
    return (PyObject *)self;
}

python:+ 的源代码:

static PyObject *
list_concat(PyListObject *a, PyObject *bb)
{
    Py_ssize_t size;
    Py_ssize_t i;
    PyObject **src, **dest;
    PyListObject *np;
    if (!PyList_Check(bb)) {
        PyErr_Format(PyExc_TypeError,
                  "can only concatenate list (not \"%.200s\") to list",
                  bb->ob_type->tp_name);
        return NULL;
    }

    // etc ...

原文:python - If x is list, why does x += "ha" work, while x = x + "ha" throw an exception?

译文:在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢?

译者:justjavac

STM32F407 HAL库定时器触发ADC采集与DMA数据传输(定时器TIM+ADC+DMA) 在STM32F407系列微控制器的开发中,结合定时器、ADC(模数转换器)与DMA(直接存储器访问)控制器,能够显著提升数据采集与传输的效率。本文将指导你如何使用STM32 HAL库,通过定时器触发ADC1的单通道采集,利用DMA传输数据,最终通过串口将电压值打印出来。具体实现中,我们将读取ADC1的通道5(对应引脚PA5),并将转换得到的电压值发送到串口助手上进行显示。 阅读详情

相关推荐

深入解析DMR协议中的4-CPFSK调制技术与实现

本文深入解析了DMR协议中采用的4-CPFSK调制技术。该技术凭借其连续相位、恒包络的特性,在有限的12.5kHz信道带宽内实现了稳健的通信,有效对抗干扰并提升功放效率,是DMR数字对讲机清晰、稳定通信的核心保障。文章详细阐述了其原理、实现细节及在协议栈中的协同作用。

weixin_29306875的博客 229

can only concatenate list (not "str") to list 解决

我的代码: info = item['title'] + '\n' + item['content'] + '\n' 写python代码出现这个提示的时候:can only concatenate list (not "str") to list 该提示字面意思是: 只能将list类型和list类型联系起来,而不是str类型 ...

laifeng9144的专栏 4万+

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 378

can only concatenate list (not “str”) to list 解决

can only concatenate list (not “str”) to list 解决 代码 f.write(jpgs + “;” + label + “\n”) 原意: 两个str类型连接起来 报错: can only concatenate list (not “str”) to list 翻译: 只能将 list 和 list 联系起来,而不是 str 解释: 一个是str,另一个是list 解决思路: 检查变量 str 类型 误区:str连不起来,只是转换成list 网上

weixin_45648168的博客 1万+

科研智能体平台搭建与实战:大模型如何驱动科研自动化

大模型技术的快速发展,正推动AI智能体从单纯对话工具向主动执行任务的科研伙伴演进。智能体的核心原理在于整合模型调用、工具使用、知识库检索与工作流编排,使其能够自主拆解目标、执行操作并迭代优化。在科研场景中,这一技术价值尤为突出:文献初筛、实验数据清洗、代码调试、结果汇总等高频重复劳动均可实现自动化,大幅释放研究者精力。从基础组件配置到多智能体协同,从平台选型到提示词调优,实际落地需要关注模型匹配、工具稳定性、记忆管理与人机校验机制。本文基于真实工程经验,系统梳理科研智能体平台的搭建路径、应用案例与高频问题排

weixin_32597009的博客 282

描边盛开火玫瑰

python描边盛开火玫瑰 代码如下 import turtle as t t.setup(800,800) t.hideturtle() t.speed(11) t.penup() t.goto(50,-450) t.pensize(5) t.pencolor("black") t.seth(140) t.pendown() t.speed(10) t.circle(-300,60) t.fd(100) #jiaodu80 #1ye t.seth(10) t.fd(50) t.fillcolor("gr

weixin_50973371的博客 2062

TypeError: can only concatenate list (not "str") to list """ The above exception was the direct cau...

这个错误消息表明,你在尝试将一个字符串("str")连接到一个列表(list)上时出现了问题。在 Python 中,你可以使用加号(+)连接两个列表,但是你不能将一个字符串和一个列表连接起来。 举个例子,如果你想要将一个字符串和一个列表连接起来,可以这样写: list1 = ['a', 'b', 'c'] string1 = 'd' # This is okay list2 = list1 + ...

weixin_42598278的博客 3290

半车(前后、左右)、整车悬架详细推导建模和simulink仿真分析

用达朗贝尔定理依据悬架数学模型,得到悬架模型微分方程,分别用simulink建立前后半车、左右半车悬架;结合转向2自由度模型与半车侧倾模型,对模型考虑相干性、延时性的C级随机路面下,仿真分析给定角阶跃输入下的侧倾稳定性。

Mr.邹的博客 1万+

python类型错误:can only concatenate list (not "str") to list

TypeError:can only concatenate list (not "str") to list: 类型错误:只能将list类型和list类型联系起来,而不是str类型; 解决方法: (1)加入list用append添加。 (2)类似这样的写法:"/".join([root_path,file_name])将需要加入的东西先连接起来,然后用[ ]组合. 举个例子: pr...

weixin_30888027的博客 4519

【雷达通信】雷达信号处理仿真【含Matlab源码 2509期】

雷达信号处理仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 903

华为OD机试真题 新系统 2026-08-16 Python&JS【智能家居模式调度优化】

智能家居系统中有多个自动化联动模式,每个模式 modes[i]=[start_time,end_time,power],表示它在左闭右开区间 [start_time,end_time) 内持续消耗固定功率 power。

MISAYAONE的博客 84

can only concatenate list (not "str") to list

这个错误消息的意思是,你试图把一个字符串连接到一个列表上,但是这是不允许的。 这种情况通常发生在你使用了加号 + 运算符,试图把一个字符串和一个列表连接起来,如下所示: my_list = [1, 2, 3] my_string = "abc" # This will cause an error: new_list = my_list + my_string 要解决这个问题,你可以将字符串转...

weixin_35756130的博客 875

YOLOV5 自动刷图脚本实战(十五)之如何找到正确的门

DXF是一个2D游戏,我们所看到的人物移动,其实是后面的背景在移动,我们所看到的画面,不过是一个完整背景中的一个镜头视角而已想要正确找到门的坐标,我们需要对不同的地图中的每个房间做一些配置信息。

qq_38892949的博客 2805

在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢

问题 众所周知,在 python 中,+ 运算符可以使用在列表上,+ 运算符只需要第二个操作数是可迭代的(原文:iterable。@justjavac),那么 + 显然可以运算在 "ha" 上。 代码如下: >>> x = [] >>> x += "ha" >>> x ['h', 'a'] >>> x = x + "ha" Traceback (most recent call

justjavac(迷渡) 2029

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在 python 中,如果 x 是 list,为什么 x += "ha" 可以运行,而 x = x + "ha" 却抛出异常呢...

问题 众所周知,在 python 中,+ 运算符可以使用在列表上,+ 运算符只需要第二个操作数是可迭代的(原文:iterable。@justjavac),那么 + 显然可以运算在 "ha" 上。 代码如下: >>> x = [] >>> x += "ha" >>> x ['h', 'a'] >>&gt...

weixin_34409822的博客 179

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python except exception_处理在except子句中发生的Python异常

I have some code in a Python except clause that is intended to do some logging, but the logging code might itself cause an exception. In my case, I'd like to just ignore any second exception that migh...

weixin_39518678的博客 384

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python 中list()的用法

list()是 Python 中的一个内置函数,用于创建列表。列表是 Python 中的一种可变序列类型,可以存储任意类型的元素。以下是list()

核电子探索者 744

【Python】内置异常类大全

在软件开发的世界里,代码的执行并非总是一帆风顺。我们编写的程序,就像是为现实世界设计的自动化流程,总会遇到各种预料之外或无法避免的情况。这些情况可能包括:在传统的编程范式中,处理这些“意外”情况通常依赖于返回错误码(Error Code)或特殊返回值(如或)。这种方式的问题在于:为了解决这些问题,现代高级编程语言引入了“异常处理”(Exception Handling)机制。异常处理是一种结构化的错误管理方式,它将程序的正常执行流程与错误处理流程分离。当一个“异常”事件发生时,程序会“抛出”(raise)一

宅男很神经 576

python里index函数_Python的list.index()函数在找不到任何内容时不会引发异常

如果该项不存在,Python的list.index(x)会引发异常。 有没有一种不需要处理异常的更好的方法呢?要看。 你在乎吗?不必要最好的方法取决于在什么都没发现的情况下该做什么。 即使我们的list.find返回了-1,您仍然需要测试以查看i == -1并采取一些措施。Raymond-似乎应该由我决定我的代码是否可以处理None索引,而不是强制执行异常。 但是后来,我仍然在学习如何成为Pyth...

weixin_39836943的博客 3048

C++ List遍历异常

问题描述:   在两个线程中,线程1通过UDP接收数据动态的向LIst中添加数据,线程2实时动态遍历List中的数据,发现虽然在线程1中所有的数据均已添至List中,但是线程2中却无法成功遍历List中所有的数据,代码如下: void *pthread1(void *arg) { WORD sockVersion = MAKEWORD(2, 2); WSADATA wsadata; if (WSAStartup(sockVersion, &wsadata) != 0) { cout &l

qq_35308053的博客 823

list的长度怎么获取python_python获取list的长度

python内嵌函数列表_IT/计算机_专业资料。内建函数 本节介绍的函数在解释...python基础教程08.1Lists_互联网_IT/计算机_专业资料。python基础教程 列表? 车万翔 ? ? 哈尔滨工业大学 ? 一个例子 ? v??读取三个数字,并计算平均数......请用Python 写一个获取用户输入数字, 并根据数字大小输出不同信息的脚本 Python 的 except 用来捕获...

weixin_35828338的博客 4905

Conda list列出Miniconda-Python3.11已安装包

在AI与数据科学项目中,环境不一致常导致代码运行异常。`conda list`不仅是查看已安装包的工具,更是实现环境可复现的关键。它基于本地元数据快速输出精确依赖信息,支持导出锁定文件以跨平台重建环境,帮助团队统一配置、排查问题并保障部署一致性。

weixin_42613018的博客 481

Python基础——list、dict的常用操作

1、list 1.list 增加元素 实例 >>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li.append("new") >>> li ['a', 'b', 'mpilgrim', 'z', 'example', 'new'] >>> li.insert(2, "n...

举世无双的博客 436

Python subprocess.Popen 只接受 list 不接受单个 string

参考:http://stackoverflow.com/questions/901982/python-oserror-errno-2

yasi_xi的专栏 3610

python ftplib list_可移植地使用Python的ftplib获取目录列表

You can use ftplib for full FTP support in Python. However the preferred way of getting a directory listing is:# File: ftplib-example-1.pyimport ftplibftp = ftplib.FTP("www.python.org")ftp.login("anon...

weixin_35775988的博客 303

Python学习

Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。python应用途径自动脚本自动化办公化web应用程序人工智能基于python开发ai程序基于python完成大数据开发flink,spark是否支持下标索引支持列表元组字符串不支持集合字典是否支持重复元素支持列表元组字符串不支持集合字典是否支持修改元素支持列表集合字典不支持元组字符串五类容器的异同点共同点'''1.支持for循环2.len() max() min()内置函数。

m0_68609054的博客 1615
上一篇: python: extend (扩展) 与 append (追加) 的差别
下一篇: 怎么成为技术大牛
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值