从列表中获取第一个元素,无异常

Luk*_*don 4 python python-2.7

考虑这段代码

description = ""
desc = hxs.select('/html/head/meta[2]/@content').extract()
if len(desc) > 0:
    description = desc[0]       
item["description"] = description
Run Code Online (Sandbox Code Playgroud)

desc是一个字符串列表.如果list为空,则description为空字符串,如果不是,则为列表中的第一个元素.如何使它更pythonic?

忘记提到我必须使用2.7

Fré*_*idi 9

你可以写:

desc = hxs.select("/html/head/meta[2]/@content").extract()
item["description"] = desc[0] if len(desc) > 0 else ""
Run Code Online (Sandbox Code Playgroud)

正如下面的评论中所指出的,您还可以直接在布尔上下文中评估列表:

item["description"] = desc[0] if desc else ""
Run Code Online (Sandbox Code Playgroud)

  • @WaleedKhan或只是`if desc`,因为空列表是假的. (6认同)
  • @FrédéricHamidi:但你明白错误的事情.你关心列表的空虚,而不是长度; 使用长度来检查空虚可能是最快的方法,这是无关紧要的.(事实上​​它可能并不意味着它甚至可能是有害的.) (3认同)
  • 或者`item ["description"] = desc和desc [0]或""`如果这需要在早期的pythons上工作,这些pythons会阻塞'else'部分. (2认同)

iru*_*var 7

或者,您可以利用next支持默认值的事实

item["description"]  = next(iter(desc), "")
Run Code Online (Sandbox Code Playgroud)