Python:如何在表达式中创建列表推导后重新使用列表推导

Har*_*Har 4 python python-2.7

如何在使用带有if else表达式的列表推导创建的表达式中重用相同的列表?在单个语句/表达式中实现它(不使用任何中间变量)即为index = 0 if [listcomprehension]空其他获取列表推导的第一个元素而不重新创建它

carIndex = [index
            for index, name in enumerate([car.name for car in cars]) 
            if "VW" in name or "Poodle" in name][0]
Run Code Online (Sandbox Code Playgroud)

Pad*_*ham 7

使用生成器表达式,然后使用默认值0,如果您不打算存储列表,则创建一个是无意义的:

carIndex = next((index for index, name in enumerate(car.name for car in 
cars if "VW" in car.name or "Poodle" in car.name)),-1)
Run Code Online (Sandbox Code Playgroud)

如果匹配,您的原始逻辑将始终返回0,因此我不确定这是否是您想要的.这实际上会返回与汽车名称匹配的汽车索引:

carIndex = next((index for index, car in enumerate(cars) 
if any(x in car.name for x in ("VW","Poodles"))), -1)
Run Code Online (Sandbox Code Playgroud)

你的第一个例子相当于:

carIndex = next((0 for _ in (car for car in 
cars if "VW" in car.name or "Poodle" in car.name)),-1)
Run Code Online (Sandbox Code Playgroud)

这将简单地成为:

carIndex = 0 if any("VW" in car.name or "Poodle" in car.name for car in cars) else -1
Run Code Online (Sandbox Code Playgroud)

  • @FrerichRaabe,其实不行,OP也在寻找子串 (2认同)