繁体   English   中英

检查列表或集合的元素是否是单一类型的简单方法?

the simple way to check if the elements of a list or set are single type?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我需要编写一段代码,如果所有元素都是int或者都是字符串然后返回true,否则返回false

[1,'1','a','b'] False
[1,2,3,4] True
['apple','orange','melon'] True
['1', 2, 3, 4] False

我的解决方案是这些

def foo(l):
    t = type(l[0])
    if t is not str and t is not int:
        return False
    for x in l:
        if t != type(x):
            return False
    return True

我认为应该会更好。

8 个回复

此代码通常检查所有元素是否属于同一类型:

len(set(type(elem) for elem in elems)) == 1

它回答了您的问题的标题,但其工作方式与您的解决方案不同(对于浮点数列表,它返回false)。

如果要求列表l所有元素都是某种类型,例如int ,那么以下是一种非常有效的方法:

any(not isinstance(e, int) for e in l)

它是短路的,即在第一次出现的list元素中,如果类型为int则它不会计算为False

如果您要求列表l所有元素只是相同类型并且不提供此类型作为输入信息,则列表中至少有一个元素,那么这是一个类比:

all(type(e) == type(l[0])) for e in l)
type(l[0]) in [int, str] and all( type(e) == type(l[0]) for e in l)
def all_of(iterable, types=[str,int])
    actual_types = set(map(type, iterable))
    return len(actual_types) == 1 and next(iter(actual_types)) in types
In [32]: len(set(map(type, [1, 2, 3]))) == 1
Out[32]: True

In [33]: len(set(map(type, [1, 2, '3']))) == 1
Out[33]: False

如果要检查序列是否都是特定类型...

def check_all_same_type(sequence, typ, strict=True):
    if strict:
        return all(type(item) == typ for item in sequence)
    return all(isinstance(item, typ) for item in sequence)

如果你只是想确保它们都是相同的类型......

types = set(type(item) for item in sequence)
all_same = (len(types) == 1)
if all_same:
    print "They're all a type of", type(next(iter(types)))

我认为它会更快:

ints

>>> ints = set(list(range(10)))
>>> ints
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
>>>
>>>
>>> l = set([1,2,3,'d'])
>>> l - ints
set(['d'])
>>>
>>> l = set([1,2,'3','d'])
>>> l - ints
set(['3', 'd'])
>>>

可以将此方法用于str's

这是我如何做到的。 检查初始条件后,只要elem的类型无法通过,函数就会停止检查。 它还处理空列表。

def check_elem_types(l):
    return bool(l) and type(l[0]) in (int, str) and all(type(e) == type(l[0]) for e in l[1:])

如果你想处理unicode字符串(在Python 2.x中),你需要这样做:

def check_elem_types(l):
    return (bool(l) and isinstance(l[0], (int, basestring)) and
            all(type(e) == type(l[0]) for e in l[1:]))
2 创建单一类型对象的列表

我有一个Animal特征和一些案例类,如下所示 这是我的 Herd 类,它可以包含单一类型动物的列表 我想创造的是一群单一类型的动物。 在 Scala 中,两者都是有效的,但是如果您查看一群猫和狮子的含义,那就没有意义了。 有没有办法将Herd限制为单一类型? ...

3 单一类型的小数或枚举

是否可以定义一个XSD类型,该类型可以包含任何有效的十进制数字或一组预定义值之一。 例如,如果我想要一个可以包含数字或以下字符串之一的属性:“ max”,“ min” 该文件将是有效的: 尽管本文档中的任何元素都不有效: 具体来说,我计划使用float.MaxValu ...

2014-11-17 17:09:01 1 61   xsd
4 从单一类型创建不同的POCO

我正在围绕SCADA数据库编写一个包装库,并且遇到了一个小的“嬉皮代码设计”问题。 它涉及到如何将提供的数据库对象转换为POCO。 我正在使用供应商.NET库调用数据库。 当我打电话给数据库时,它传回了DBObject类型的对象。 这可以代表数据库中的任何内容,因此在它所拥有的信 ...

5 Scala:检查2个变量是否属于同一类型

所以我一直试图检查如何检查2个变量x和y是否属于同一类型。 人们发布了关于=:=的信息,但这似乎只检查变量是否属于X类型。 可以使用模式匹配中的一些技巧吗? 谢谢。 ...

6 Strapi 中是否有针对单一类型的草稿系统?

我想在 Strapi 中保存单一类型的草稿而不发布它。 现在,如果我保存更改,它将直接发布。 我尝试使用布尔值 - 已发布,并在发布为真时显示前端应用程序上的数据。 这样,如果发布的 bool 为 false,则不会显示整个单页数据。 我想要它,以便以前的数据仍然存在,但不是新的未发布的数据。 有 ...

2020-04-28 09:23:11 1 344   strapi
8 单一类型的性状中的双向链接

我试图创建一个特征,该特征实现带有双向链接的树,以便当节点添加父节点时,该节点将添加到父节点的子节点中。 我在下面得到的错误是: 类型不匹配; 找到所需的:PolyTree.this.type(具有基础类型PolyTree [T]):T 任何知道为什么此代码出错的信息以及使该代码 ...

2011-05-10 02:12:19 1 171   scala
10 单一类型的Clang回归或向量化

我拧紧螺丝钉,发现found铛产生的无符号短裤之间有一个奇怪的区别。 https://godbolt.org/g/36fgsT 如果limit是除unsigned short以外的任何其他值,则其输出将大大减少。 它仅在使用-O2或-O3 clang 3.5及更高版本上发生。 我 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM