2015-11-24 27 views
1

所以我有SteamApp對象的列表:爲您在列表中選擇特定項目不重複次數或找到()

>>> games 
    [<SteamApp "Counter-Strike: Global Offensive" (730)>, <SteamApp "XCOM: Enemy Unknown" (200510)>] 

我也有這樣的一段代碼:

ownscs = [] 

if '"Counter-Strike: Global Offensive"' in games: 
      print('Owns CS') 
      ownscs.append(foo) 

所有我想要做是檢查是否有人擁有反恐精英 但這裏來的問題癥結,列表遊戲是不可迭代的,並沒有屬性找到,如果我嘗試這兩個我得到:

if any('"Counter-strike: Global Offensive"' in s for s in games): 
TypeError: argument of type 'SteamApp' is not iterable 

if games.find('"Counter-strike: Global Offensive"') != -1: 
AttributeError: 'SteamApp' object has no attribute 'find' 

所以我的問題是:我如何檢查反恐精英列表遊戲:全球攻勢時,它顯然沒有可迭代的,也不容易找到。

我使用https://github.com/smiley/steamapi創建SteamApp對象,如果你想知道這是什麼。

+0

您需要知道steamapp對象的屬性。試試'dir(steamapp)' – user193661

+0

Python'list'是_always_可迭代的,所以這不是你的問題。也就是說,你的'遊戲= [']'行實際上並沒有創建一個列表。你是否試圖告訴我們該列表已經被初始化爲包含兩個'SteamApp'對象? –

+0

@ KevinJ.Chase是的,這就是我的意思,甚至沒有兩個,但更多!該列表包含每個遊戲的SteamApp對象。 El'endia的映射答案確實有效! – Lyux

回答

4

您正試圖在SteamApp對象列表中找到str(字符串)。這些SteamApp對象實際上有與str()使用定義的方法,所以這個代碼應工作:

if "Counter-Strike: Global Offensive" in map(str,games): 
      print('Owns CS') 
      ownscs.append(foo) 

注意,我拿出了單引號(我認爲他們是不必要的),改變gamesmap(str,games)mapstr應用於games中的每個項目,這些項目將生成僅包含遊戲名稱的遊戲列表。做list(map(str,games))看看這個列表是什麼樣的。

+2

噢,我的天啊,非常感謝,這個技巧還有,當看'list(地圖(str,遊戲))'我終於明白了Mapping如何工作,非常感謝! – Lyux

4

即使對方的回答是已經接受,這種替代是一個小更Python,而更接近海報的嘗試:

if 'Counter-strike: Global Offensive' in (s.name for s in games): 

注意s.name有這個類作爲str(s)相同的結果,但我覺得使用name屬性增加了清晰度。

相關問題