列表中是否有任何数字?

时间:2013-11-18 06:43:26

标签: python python-2.7 python-3.x

我有一个清单:

my_list = [12,8,0,4,7,21,27,"O",29,3,"X","O","X","X"]

此列表在整个计划中得到更新。每次更新时,我都要查看它是仅包含数字还是仅包含字符串,或两者都包含。我可以用它做什么? 我需要检查列表中的所有元素。有什么建议吗? **

**有关代码如何工作的说明,请

谢谢大家的帮助。感谢您的帮助。

7 个答案:

答案 0 :(得分:8)

如何使用typeset

>>> my_list = [12,8,0,4,7,21,27,"O",29,3,"X","O","X","X"]
>>> set(map(type, my_list))
{<class 'int'>, <class 'str'>}
>>> set(map(type, my_list)) == {int, str}
True
>>> set(map(type, my_list)) == {int}
False
>>> set(map(type, my_list)) == {str}
False

>>> my_list = [12,8,0,4,7,21,27]
>>> set(map(type, my_list))
{<class 'int'>}

>>> my_list = ["X", "O", "X", "X"]
>>> set(map(type, my_list))
{<class 'str'>}
>>> set(map(type, my_list)) == {str}
True

type返回对象的类型:

>>> type(1)
<class 'int'>
>>> type('X')
<class 'str'>

map(type, seq)type应用于seq

>>> map(type, [1, 2, 3, 'X'])
<map object at 0x7fc763de6e90>
>>> list(map(type, [1, 2, 3, 'X']))
[<class 'int'>, <class 'int'>, <class 'int'>, <class 'str'>]
>>> # Using `set`, you can get unique types.
>>> set(map(type, [1, 2, 3, 'X']))
{<class 'int'>, <class 'str'>}

注意(@ lvc的评论)

  

如果你碰巧有intstr子句,这将会中断   名单。具体而言,这些类可能不太可能,但是   这意味着它没有很好地概括。

答案 1 :(得分:2)

使用isinstanceall的组合:

>>> all(isinstance(x, (int, str)) for x in my_list)
True

答案 2 :(得分:1)

isinstance函数告诉元素x是否是类的实例。因此,isinstance(2,int)的计算结果为true。

使用map我们可以将isinstance应用于列表的每个成员,生成包含结果的列表。所以:

map(lambda x: isinstance(x, int), my_list)

评估为:

[True, True, True, True, True, True, True, False, True, True, False, False, False, False]

如果你只是想知道列表中是否有字符串,你可以这样做:

True in map(lambda x: isinstance(x, str), my_list)

答案 3 :(得分:1)

您可以使用any()

my_list = [12,8,0,4,7,21,27,"O",29,3,"X","O","X","X"]
if any(isinstance(i, (str, int)) != True for i in my_list):
    print "There is something else in the list!"

any()语句相当于:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

所以,代码相当于:

for item in my_list:
    if not isinstance(i, (str, int)):
        print item, "is not a string or list!"
        break

答案 4 :(得分:1)

我认为filter更合适。

result = filter(lambda x: isinstance(x, int), my_list)
if result: print 'find integer'

答案 5 :(得分:1)

只是为了另一种选择:

totint = sum(isinstance(x, int) for x in my_list)
if totint == 0:
    print "all are strings"
elif totint == len(my_list):
    print "all are ints"
else:
    print "mixed"

答案 6 :(得分:1)

另一种选择,应该比扫描整个清单更快:

if not any(isinstance(x, int) for x in my_list):
    print "all are strings"
elif not any(isinstance(x, str) for x in my_list):
    print "all are ints"
else:
    print "mixed"

甚至更好:

if any(isinstance(x, int) for x in my_list):
    if any(isinstance(x, str) for x in my_list):
        print "mixed"
    else:
        print "all are ints"
else:
    print "all are strings"