首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在python中赋值和比较

在python中赋值和比较
EN

Stack Overflow用户
提问于 2014-11-07 22:15:06
回答 2查看 51关注 0票数 0

我需要按顺序做re.match,在匹配的情况下,我需要匹配的结果来选择组。现在我可以做下一步了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r = re.match('cond1', l)
if r:
    # work with r.group()
else:
    r = re.match('cond2', l)
    if r:
        # work with r.group()
    else:
        r = re.match('cond3', l)
        if r:
            # work with r.group()

但是我怎样才能做得更好呢?我发现不可能像这样在if中执行赋值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if r = re.match('cond1', l):
    # work with r.group()
elif r = re.match('cond2', l):
    # work with r.group()
elif r = re.match('cond3', l)
    # work with r.group()
EN

回答 2

Stack Overflow用户

发布于 2014-11-07 22:18:52

你可以使用一种理解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r, cond = next((m,c) for (m,c) in ((re.match(cond, line), cond) for cond in ('cond1', 'cond2', 'cond3')) if m)

if cond=='cond1':
    # work with r.group() for cond1
elif cond=='cond2':
    # work with r.group() for cond2

或者,如果这看起来太神秘,一个循环:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for cond in ('cond1', 'cond2', 'cond3'):
    r = re.match(cond, line)
    if r:
        break

if not r:
    # no match
elif cond=='cond1':
    # work with r.group() for cond1
elif cond=='cond2':
    # work with r.group() for cond2
票数 3
EN

Stack Overflow用户

发布于 2014-11-07 22:29:36

首先,将事物重构为函数通常会有所帮助。在这种情况下,它很有帮助,因为您可以很容易地从一个函数提前返回;您不能从其他代码中间的一段代码提前返回。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def first_match(haystack):
    r = re.match('cond1', haystack)
    if r:
        # work with r.group()
        return
    r = re.match('cond2', l)
    if r:
        # work with r.group()
        return
    r = re.match('cond3', l)
    if r:
        # work with r.group()

所有的else比特和缩进难题都消失了。

另外,一般来说,当你问如何将3个或更多的东西链接在一起时,正确的答案是找出如何将任意数量的东西链接在一起,并使用N=3来实现。这通常意味着循环(或者隐藏在像map这样的函数中的循环,或者递归函数定义,等等)。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def first_match(exprs, haystack):
    for expr in exprs:
        r = re.match(expr, haystack)
        if r:
            return r

然而,在这种情况下,您尝试做的事情实际上是可行的。也许不是个好主意,但是…正则表达式match对象总是真实的。当然,None是假的。所以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r = re.match('cond1', l) or re.match('cond2', l) or re.match('cond3', l)
if r:
    # work with r.group(), which is the group for whichever matched

但请注意,如果你想使用真实性,你也可以在循环中这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
next(filter(bool, (re.match(cond, l) for cond in ('cond1', 'cond2', 'cond3'))))

最后,您已经在使用正则表达式了,那么为什么不使用正则表达式呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r = re.match('cond[123]', l)
if r:
    # work with r.group()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26810994

复制
相关文章
python中字典中的赋值技巧,update批量更新、比较setdefault方法与等于赋值
1. Pop方法:删除指定的键的键值对。需要指定一个自己已知的键,删除后返回的是键对应的值。
刘金玉编程
2019/07/27
6K0
字符串整体赋值和比较问题
我们平常给一个字符串初始化了,但是后面我们想重新赋一个字符串却错误了,如下面的操作。
Twcat_tree
2022/11/30
4810
字符串整体赋值和比较问题
Java和Python中for循环的比较
Java是强类型的语言,而python是弱类型的语言。 先看Java中的for循环使用,如下图:
py3study
2020/01/14
2.3K0
Python中的循环-比较和性能
Python是当今最受欢迎的编程语言之一。这是一种具有优雅且易读语法的解释性高级语言。但是,Python通常比Java,C#尤其是C,C ++或Fortran慢得多。有时性能问题和瓶颈可能会严重影响应用程序的可用性。
计算机与AI
2020/12/14
3.4K0
Python中的循环-比较和性能
在python中如何比较两个float
奇怪的现象 前几天跟同事聊起来,在计算机内部float比较是很坑爹的事情。比方说,0.1+0.2得到的结果竟然不是0.3? >>> 0.1+0.2 0.30000000000000004 为什么会出现
py3study
2020/01/06
4.2K0
【C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 在子函数中间接赋值 )
在 函数体 内部 , 声明普通变量 , 如果 获取该变量的地址 , 将该 地址 传递给 函数形参 , 在外部函数中 , 通过指针地址 , 修改内存中的数据 ;
韩曙亮
2023/03/29
3.9K0
【C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 在子函数中间接赋值 )
Python的赋值和引用
以某
2023/03/07
2K0
Python的赋值和引用
python入门-变量和赋值
其实,Python中的赋值语句我们在之前的学习过程已经接触了很多,比如a=1,就是将数值1赋值给变量a。
皮大大
2023/08/23
3030
【python内存机制】引用和赋值
1 引用和对象 1.1> 创建变量的过程 内存创建对象 --> 创建变量 --> 变量引用到对象 因此:变量只是到内存对象的一个引用 1.2> 对象组成 类型标识符(标识对象类型) 引用计数(是否回收对象) 1.3> 垃圾回收 如果对象没有变量引用(引用计数为0),那么会被回收 1.4> 共享引用:多个变量引用同一个对象 a = 1
py3study
2020/01/14
7070
【说站】python中apply和transform的比较
1、相同点,能针对dataframe完成特征的计算,并且常常与groupby()方法一起使用。
很酷的站长
2022/11/23
7620
【说站】python中apply和transform的比较
在 Java 中如何比较日期?
在 Java 中有多种方法可以比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。在Java中,Date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。
武培轩
2019/10/19
4.7K0
python——赋值
赋值操作,本来没有什么细节。但是python现在的赋值操作也是花里胡哨的,跟C++快一样烦人了,你不用这种方式,总有人用,因此还是有必要学一下。就像切片能够完成删除,增加一样,虽然很不好,但是python支持这种做法,就难免有人这么写。
zy010101
2021/06/09
2.1K0
python中字典的比较
今天碰到一个字典比较的问题,就是比较两个字典的大小,其实这个用的不多,用处也没多少,但是还是记录一下。
py3study
2020/01/08
4.6K0
Django 2 DateTimeField格式 在程序中手动赋值
一般在数据模型中设置创建时间、更新时间的时候都会使用DateTimeField的格式,也会设置时间自动设置,示例如下:
Devops海洋的渔夫
2019/09/30
3.2K0
python等值和大小比较
在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较。关键词:内置类型、同类型。所以,两个对象如果类型不同,就没法比较,比如数值类型的数值不能和字符串类型的数值或字母比较。
py3study
2020/01/20
3.2K0
python基本语法 深浅拷贝和赋值
文章目录 深浅拷贝和赋值 深浅拷贝和赋值 直接赋值 其实就是对象的引用(别名)。 浅拷贝(copy) 拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy) copy 模块
Autooooooo
2020/11/09
2890
python基本语法 深浅拷贝和赋值
Python对象的比较:is和==
这两个符号在Python的比较判断中应用广泛,但是这两者是有区别的,体现的是对象中的相等和标识符的概念。==符号比较的是两个对象是否相等,而is符号表达的则是标识符相等。 首先赋值一个列表给a,再把a赋值给b
哒呵呵
2018/08/06
9900
Python中赋值、浅拷贝与深拷贝
   python中关于对象复制有三种类型的使用方式,赋值、浅拷贝与深拷贝。他们既有区别又有联系,刚好最近碰到这一类的问题,研究下。 一、赋值         在python中,对象的赋值就是简单的对象引用,这点和C++不同。如下:         list_a = [1,2,3,"hello",["python","C++"]] list_b = list_a         这种情况下,list_b和list_a是一样的,他们指向同一片内存,list_b不过是list_a的别名,是引用。        
用户1214487
2018/01/24
8020
JavaScript大小比较 赋值运算符详解
比较运算中的操作数可以是任意类型的值,但是在执行运算时,会被转换为数字或字符串,然后再进行比较。如果是数字,则比较大小;如果是字符串,则根据字符编码表中的编号值从左到右逐个比较每个字符。
用户3519280
2023/07/07
6250
点击加载更多

相似问题

Python列表中的值比较和赋值

30

赋值和比较

81

python中的这种链赋值和比较是什么?

33

在Java中给布尔变量赋值和赋值比较结果的区别

510

在Python中同时赋值和打印

50
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文