Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查列表中的特定项,无需迭代或查找()_Python_Python 3.x_Steam Web Api - Fatal编程技术网

Python 检查列表中的特定项,无需迭代或查找()

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

因此,我有一个SteamApp对象列表:

   >>> 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))
时,我终于明白了映射是如何工作的,非常感谢!