2016-03-05 73 views
-1

我試圖找出一種方法來確定變量是否包含一個項目或多個項目。我知道這似乎相當模糊,但希望下面將闡明一些亮點。解析一個變量可能是多個項目

我已經嘗試了一些東西,起初我還以爲這個項目看起來就像是一個字符串或列表,但使用if isinstance(variable, basestring)產生在每一個價值True。我試圖使用len()來檢查長度,但當然,因爲它們是字符串,我總是會得到字符串中每個字符的計數。我也試過if isinstance(variable, list),但當然這總是有False

我試圖自己打印每個項目,下面是一些sudo代碼和測試數據。

variable = ["[u'cheese']", "[u'grapes', u'oranges']", "[u'apple']"] 

for item in variable: 
    if isinstance(item, list): 
     for i in item: 
      print i 
    else: 
     print item 

當然,如上所述,此代碼不起作用,我不知道如何解決這個問題。任何幫助,將不勝感激。

+4

你有一個字符串列表,而不是一個列表的列表 –

+0

是的,我可以看到,但是做一個簡單的'for i in variable:print i'生成[u'grapes',u'oranges']或[u'apple']我希望每個項目都能自己打印 – iNoob

+3

每個項目_is_自己打印。每一個都是單個字符串。你爲什麼使用字符串而不是列表? – Chris

回答

3

如果由於某種原因,你真正需要處理字符串以這種方式,您可以使用ast.literal_eval從你的琴絃真正的清單:

import ast 

for item in ["[u'cheese']", "[u'grapes', u'oranges']", "[u'apple']"]: 
    for food in ast.literal_eval(item): 
     print(food) 
+0

謝謝克里斯,虐待ast看。 – iNoob

1

使用實際列表而不是字符串。然後它應該很容易循環通過項目。

variable = [[u'cheese'], [u'grapes', u'oranges'], [u'apple']] 

for item in variable: 
    for x in item: 
     print x 

輸出:

cheese 
grapes 
oranges 
apple 
+1

感謝您的回覆,但如果您使用了我提供給您的數據,請參閱此部分將自行打印每個字符,而不是單詞。 – iNoob

+2

@iNoob問題是爲什麼你首先有這種奇怪的輸入數據。這可能是[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 –

1

你的變量似乎是string列表:

variable = ["['cheese']", "[u'grapes', u'oranges']", "[u'apple']"] 

但在string你可能有多個項目。因此,你可能需要做一些字符串解析。爲了您簡單的例子,如果你只想計算每個列表元素的數量,最簡單的是通過計算+ 1,因此,我建議用簡單的string.split(',')打印的元素一一逗號數量:

variable = ["['cheese']", "[u'grapes', u'oranges']", "[u'apple']"] 
for var in variable: 
    words = var.split(',') 
    for w in words: 
     printedword = w.replace('u\'','').replace('\'','').replace(']','').replace('[','').strip() 
     print(printedword) 

結果:

cheese 
grapes 
oranges 
apple 

這本來是一個更容易使用,如果你的變量是列表的列表,雖然工作。檢查出pp_答案。

+0

感謝您花時間閱讀問題並實際使用上下文中的數據。讚賞伊恩,很多時候你會在這裏得到一些人,他們只是想虐待他們沒有做的事情,他們會做一些事情。而不是實際看問題,例如,我不問如何不使用字符串列表以及如何使用列表列表。 – iNoob

+0

是的,我同意,如果它是列表清單,會更容易,但如前所述,我沒有列表清單。再次感謝 – iNoob

+0

@iNoob沒問題。 ;)似乎你有更好的解決方案由克里斯.. – Ian

0
>>> variable = ["[u'cheese']", "[u'grapes', u'oranges']", "[u'apple']"] 
>>> for i in variable: 
...  for j in i.lstrip('[').rstrip(']').split(','): 
...   print j.lstrip(" ").lstrip("u'").rstrip("'") 
... 
cheese 
grapes 
oranges 
apple 
>>>