python中的值赋值
我有两个值:starid1、starid2和一个名为starlist的列表,我想从包含id starid1和starid2的starlist中提取两个对象,并且列表中没有重复的id 这就是我编写代码的方式python中的值赋值,python,python-3.x,Python,Python 3.x,我有两个值:starid1、starid2和一个名为starlist的列表,我想从包含id starid1和starid2的starlist中提取两个对象,并且列表中没有重复的id 这就是我编写代码的方式 star1,star2=None,None for x in starlist: if x.id == starid1: star1 = x elif x.id == starid2: star2 = x 还有一种方法 star1 = [x f
star1,star2=None,None
for x in starlist:
if x.id == starid1:
star1 = x
elif x.id == starid2:
star2 = x
还有一种方法
star1 = [x for x in starlist if x.id==starid1][0]
star2 = [x for x in starlist if x.id==starid2][0]
或者我可以把它转换成字典,然后选择这两个对象。但是我觉得成本太高了,因为我只想分配两个值
当我写下这些代码时,我觉得自己太笨了。我想我只是错过了用python编写代码的正确方法。告诉我你知道如何做得更好。常用的方法是使用发电机:
star1 = next(x for x in starlist if x.id==starid1)
star2 = next(x for x in starlist if x.id==starid2)
这样做的好处是懒惰,因此可以节省内存并提前停止。在您的示例中,这与添加了break
语句的第一个循环基本相同:
star1,star2=None,None
for x in starlist:
if x.id == starid1:
star1 = x
break
for x in starlist:
if x.id == starid2:
star2 = x
break
但是请注意,如果列表中没有此类项目,next
将引发异常。如果要避免这种情况,请在调用中添加默认值:
star1 = next((x for x in starlist if x.id==starid1), None)
常用的方法是使用发电机:
star1 = next(x for x in starlist if x.id==starid1)
star2 = next(x for x in starlist if x.id==starid2)
这样做的好处是懒惰,因此可以节省内存并提前停止。在您的示例中,这与添加了break
语句的第一个循环基本相同:
star1,star2=None,None
for x in starlist:
if x.id == starid1:
star1 = x
break
for x in starlist:
if x.id == starid2:
star2 = x
break
但是请注意,如果列表中没有此类项目,next
将引发异常。如果要避免这种情况,请在调用中添加默认值:
star1 = next((x for x in starlist if x.id==starid1), None)
您能提供一些示例数据和输出示例吗?您能提供一些示例数据和输出示例吗?找到第一个星后,您的循环将中断,如果star1和star2:break对不起,更好的检查方法是
,使用这样的生成器不是一种常见的方法。找到第一颗星后,您的循环将中断,更好的检查方法是如果star1和star2:break
对不起,使用这样的生成器不是一种常见的方法。