查找元素的索引包含列表中的字符串

时间:2015-11-06 01:49:25

标签: python

例如,该列表包含:

  • 2个字符串
  • 1 int
  • 1 bool
  • 1个嵌套列表

示例:

["string1", 34, True, "string2", [2,4,6]]

问题:如何查找列表中这两个字符串的索引? (列表中的对象类型必须视为未知)

4 个答案:

答案 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