例如,該列表包含:尋找元素的索引包含在列表中的字符串
- 2串
- 1 INT
- 1布爾
- 1嵌套列表
示例:
["string1", 34, True, "string2", [2,4,6]]
問題:如何查找列表中這兩個字符串的索引? (對象類型列表中必須被視爲不詳)
例如,該列表包含:尋找元素的索引包含在列表中的字符串
示例:
["string1", 34, True, "string2", [2,4,6]]
問題:如何查找列表中這兩個字符串的索引? (對象類型列表中必須被視爲不詳)
使用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
您可以用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
如果您的列表被命名爲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)]
你可以使用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
請注意,這並不下降到嵌套列表;你會想使用遞歸來做到這一點。
在Python 2.x中應該使用'basestring'來包含'str'和'unicode'類型! – cdonts
不客氣!但是,對於3.x應該是'isinstance(item,str)',在2.x中應該是'isinstance(item,basestring)'。 – cdonts
謝謝,但是當我用int替換str並且索引是錯的 – Sbioer