例如,该列表包含:
示例:
["string1", 34, True, "string2", [2,4,6]]
问题:如何查找列表中这两个字符串的索引? (列表中的对象类型必须视为未知)
答案 0 :(得分: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
值,您也会获得bool类型的索引,因为(引用其他来源的文字):
如果你在bool类型的时候出现,这是完全合乎逻辑的 添加到python(大约2.2或2.3)。
在引入实际bool类型之前,0和1是 官方代表真值,类似于C89。避免 不必要的打破非理想但工作的代码,新的bool类型 需要像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
答案 1 :(得分: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)]
答案 2 :(得分: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
请注意,这不会进入嵌套列表;你会想要使用递归来做到这一点。
答案 3 :(得分:-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