0

如何确定此类代码中的第 i 个元素类型:

for i in some_iterable:
    if type(i) is some_class:
        print "foobar"

它目前无法正常工作,因为我期望 i 的类型作为迭代器返回,而不是存储在下面的实际值。

4

5 回答 5

3

你确定你的迭代的内容/结构吗?因为这个例子对我来说很好:

strings_and_nums = ['a', 1, 'b', 2, 'c']

for element in strings_and_nums:
    if type(element) is str:
        print "String"
    else:
        print "Something else"
# Output:
String
Something else
String
Something else
String
于 2013-09-24T07:54:09.007 回答
3

在 python 中检查类型是使用isinstance()内置函数完成的:http: //docs.python.org/2/library/functions.html#isinstance

像这样:

>>> isinstance('a',basestring)
True
>>> isinstance(['a'],list)
True
于 2013-09-24T07:49:50.053 回答
3

你应该使用isintance(i,someclass)

>>> class C(object):
 pass

>>> class D(C):
 pass
>>> type(C) == C
False
>>> type(C()) == C
True
>>> type(D()) == C
False
>>> isinstance(C(),C)
True
>>> isinstance(D(),C)
True
于 2013-09-24T07:53:07.813 回答
2

据我所知,你一点也不清楚,i它是一个可迭代的,你想检查它产生的类型。

您首先需要获取一个值:

v = next(i)

那么你应该把它放回去:

from itertools import chain

i = chain([v], i)

然后你可以isinstance检查v

isinstance(v, sometype)

是这样吗?


请注意,如果 iterable 的长度可能为 0,则您无法确定它的类型。但是,您可以阻止它破坏:

try:
    v = next(i)

except StopIteration:
    what_to_do_if_no_elements()

else:
    i = chain([v], i)
    if isinstance(v, sometype):
        ...
于 2013-09-24T07:56:03.857 回答
2

这就是这样做的方法,isinstance(i,someclass)

于 2013-09-24T07:50:03.617 回答