Python 检查列表中的特定项,无需迭代或查找()
因此,我有一个SteamApp对象列表:Python 检查列表中的特定项,无需迭代或查找(),python,python-3.x,steam-web-api,Python,Python 3.x,Steam Web Api,因此,我有一个SteamApp对象列表: >>> games [<SteamApp "Counter-Strike: Global Offensive" (730)>, <SteamApp "XCOM: Enemy Unknown" (200510)>] 我所要做的就是检查是否有人拥有反击 但问题的关键在于,列表游戏不可编辑,也没有属性find,以防我尝试以下两种游戏: if any('"Counter-strike: Global Off
>>> games
[<SteamApp "Counter-Strike: Global Offensive" (730)>, <SteamApp "XCOM: Enemy Unknown" (200510)>]
我所要做的就是检查是否有人拥有反击
但问题的关键在于,列表游戏不可编辑,也没有属性find,以防我尝试以下两种游戏:
if any('"Counter-strike: Global Offensive"' in s for s in games):
TypeError: argument of type 'SteamApp' is not iterable
及
所以我的问题是:当《反击:全球进攻》显然既不可搜索也不可查找时,我该如何检查列表中的游戏
如果您想知道这是什么,我会使用它来创建SteamApp对象。您试图在
SteamApp
对象列表中找到str
(字符串)。这些streamapp
对象实际上有一个定义用于str()
的方法,因此此代码应该可以工作:
if "Counter-Strike: Global Offensive" in map(str,games):
print('Owns CS')
ownscs.append(foo)
请注意,我去掉了单引号(我认为它们没有必要),并将
games
更改为map(str,games)
map
将str
应用于games
中的每个项目,这将生成仅包含游戏名称的游戏列表。执行list(map(str,games))
查看该列表的外观。您试图在streamapp
对象列表中找到str
(字符串)。这些streamapp
对象实际上有一个定义用于str()
的方法,因此此代码应该可以工作:
if "Counter-Strike: Global Offensive" in map(str,games):
print('Owns CS')
ownscs.append(foo)
请注意,我去掉了单引号(我认为它们没有必要),并将
games
更改为map(str,games)
map
将str
应用于games
中的每个项目,这将生成仅包含游戏名称的游戏列表。做list(map(str,games))
看看这个列表是什么样子。尽管另一个答案已经被接受,但这个替代方案有点像python,更接近海报的尝试:
if 'Counter-strike: Global Offensive' in (s.name for s in games):
请注意,
s.name
这个类与str(s)
有相同的结果,但是我觉得使用name
属性可以增加清晰度。即使另一个答案已经被接受,这个替代方案也有点像python,更接近海报的尝试:
if 'Counter-strike: Global Offensive' in (s.name for s in games):
请注意,
s.name
与该类的结果与str(s)
相同,但我觉得使用name
属性可以增加清晰度。您需要知道steamapp对象的属性。试试看dir(steamapp)
Python列表始终是可编辑的,所以这不是你的问题。也就是说,您的games=[…]
行实际上并没有创建列表。你是想告诉我们列表已经初始化为包含两个SteamApp
对象吗?@KevinJ.Chase是的,这就是我的意思,不是两个而是更多!该列表包含每个游戏的SteamApp对象。El'endia用映射的回答成功了!你在标题中说没有迭代,但在列表上迭代是可以的-问题是你还试图将SteamApp
对象视为与s
@Galax中的兼容。是的,我不完全理解我面前的内容。我认为我可以在对象没有迭代器的情况下对其进行迭代。很抱歉。您需要知道steamapp对象的属性。试试看dir(steamapp)
Python列表始终是可编辑的,所以这不是你的问题。也就是说,您的games=[…]
行实际上并没有创建列表。你是想告诉我们列表已经初始化为包含两个SteamApp
对象吗?@KevinJ.Chase是的,这就是我的意思,不是两个而是更多!该列表包含每个游戏的SteamApp对象。El'endia用映射的回答成功了!你在标题中说没有迭代,但在列表上迭代是可以的-问题是你还试图将SteamApp
对象视为与s
@Galax中的兼容。是的,我不完全理解我面前的内容。我认为我可以在对象没有迭代器的情况下对其进行迭代。很抱歉。哦,我的上帝,非常感谢,这成功了,而且在查看列表(map(str,games))
时,我终于明白了映射的工作原理,非常感谢!哦,我的天啊,非常感谢,这真是个好办法,当我看列表(map(str,games))
时,我终于明白了映射是如何工作的,非常感谢!