2015-11-06 60 views

回答

3

使用isinstance()

my_list = [True, 10.8, [1,2,3], False, True, "Hello", 12, "Sbioer", 2.5] 

for i, item in enumerate(my_list): 
    if isinstance(item, basestring): 
     print i 

輸出:

5 
7 

但是,如果你想檢查int值,你會得到布爾型項目的索引,因爲(引用來自其他來源的文本):

這是完全合乎邏輯的,如果你在布爾類型 添加到python(有時約2.2或2.3)左右。

在引入實際的bool類型之前,0和1是真值的官方表示,類似於C89。爲避免 不必要地破壞非理想但工作代碼,新布爾類型 需要像0和1一樣工作。這不僅僅是真值,還包括所有整數運算。沒有人會建議在數字上下文中使用布爾型 結果,大多數人也不推薦測試 等式以確定真值,沒有人想要找出困難的方式,即現有代碼是多少。因此,決定使 真和僞分別僞裝成1和0。這僅僅是語言進化的歷史人造物。

所以,如果你想檢查僅僅只有int值:

my_list = [True, 10.8, [1,2,3], False, True, "Hello", 12, "Sbioer", 2.5] 

for i, item in enumerate(my_list): 
    if isinstance(item, int) and not isinstance(item, bool): 
     print i 
+0

在Python 2.x中應該使用'basestring'來包含'str'和'unicode'類型! – cdonts

+1

不客氣!但是,對於3.x應該是'isinstance(item,str)',在2.x中應該是'isinstance(item,basestring)'。 – cdonts

+0

謝謝,但是當我用int替換str並且索引是錯的 – Sbioer

-1

您可以用type()功能做到這一點。試試下面的代碼。

l = [1,'abc', 'def', [1,2,3], True] 
    ans = [] 
    for i in range(len(l)): 
     if type(l[i]) == str: 
      ans.append(i) 

    print ans 
0

如果您的列表被命名爲s,那麼下面的工作:

[i for i in range(len(s)) if type(s[i]) == str] 

如果你想處理unicode字符串,那麼你可以把它改成:

[i for i in range(len(s)) if isinstance(s[i], basestring)] 
0

你可以使用enumerate()isinstance()的組合來獲取字符串項目的索引:

l = [1, True, 'Hello', [1, 3, False, 'nested'], 'Bye'] 

for i, item in enumerate(l): 
    if isinstance(item, basestring): # Python 2. Use (str, bytes) instead of basestring for Python 3 
     print i 

產生這樣的輸出:

 
2 
4 

請注意,這並不下降到嵌套列表;你會想使用遞歸來做到這一點。

相關問題