我相信有一种更简单的方法,我没有想到.

我调用了一系列返回列表的方法.列表可能是空的.如果列表非空,我想返回第一项;否则,我不想退货.该代码适用于:

my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None

在我看来,应该有一个简单的单行成语来做这件事,但无论如何我都想不出来.在那里吗?

Edit:

我在这里寻找单行表达式的原因不是因为我喜欢非常简洁的代码,而是因为我必须编写大量这样的代码:

x = get_first_list()
if x:
    # do something with x[0]
    # inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
    # do something with y[0]
    # inevitably forget the [0] part AGAIN, and have another bug to fix

我想做的事情当然可以通过一个函数来完成(而且可能会是):

def first_item(list_or_none):
    if list_or_none: return list_or_none[0]

x = first_item(get_first_list())
if x:
    # do something with x
y = first_item(get_second_list())
if y:
    # do something with y

我提出这个问题是因为我经常对Python中的简单表达式能做的事情感到惊讶,我认为如果有一个简单的表达式就可以做到这一点,那么编写函数是一件很愚蠢的事情.但是看到这些答案,它似乎是一个函数is的简单解决方案.

推荐答案

Python 2.6+

next(iter(your_list), None)

如果your_list可以是None:

next(iter(your_list or []), None)

Python 2.4

def get_first(iterable, default=None):
    if iterable:
        for item in iterable:
            return item
    return default

例子:

x = get_first(get_first_list())
if x:
    ...
y = get_first(get_second_list())
if y:
    ...

另一个选项是内联上述函数:

for x in get_first_list() or []:
    # process x
    break # process at most one item
for y in get_second_list() or []:
    # process y
    break

为了避免break,你可以写:

for x in yield_first(get_first_list()):
    x # process x
for y in yield_first(get_second_list()):
    y # process y

其中:

def yield_first(iterable):
    for item in iterable or []:
        yield item
        return

Python相关问答推荐

具有多个选项的计数_匹配

根据在同一数据框中的查找向数据框添加值

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

运行总计基于多列pandas的分组和总和

从dict的列中分钟

如何在Raspberry Pi上检测USB并使用Python访问它?

如何将多进程池声明为变量并将其导入到另一个Python文件

当点击tkinter菜单而不是菜单选项时,如何执行命令?

索引到 torch 张量,沿轴具有可变长度索引

python panda ExcelWriter切换动态公式到数组公式

为什么我的sundaram筛这么低效

如何在Great Table中处理inf和nans

如何在Gekko中使用分层条件约束

从一个df列提取单词,分配给另一个列

504未连接IB API TWS错误—即使API连接显示已接受''

Pandas:将值从一列移动到适当的列

将像素信息写入文件并读取该文件

解析CSV文件以将详细信息添加到XML文件

try 在单个WITH_COLUMNS_SEQ操作中链接表达式时,使用Polars数据帧时出现ComputeError

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?