Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中为嵌套列表和基本类型设置类型检查器?

如何在python中为嵌套列表和基本类型设置类型检查器?
EN

Stack Overflow用户
提问于 2015-07-16 07:38:44
回答 4查看 118关注 0票数 0

如果我需要为基本类型编写类型验证器(其中包括嵌套列表),那么标准方法是什么?

也就是说,如果给我一个值a和一个字符串list<list<int>>,如何检查a实际上是一个list of list of ints?

有没有毕达通的方法来解决这个问题?

注意:我知道Python与鸭子类型有关,只是在这种情况下,我需要进行一些验证,因为数据将被传递到另一个系统。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-16 07:41:12

您可以使用isinstance检查某物的类型。

代码语言:javascript
运行
AI代码解释
复制
def is_list_of_list_of_int(a):
    return isinstance(a, list) and isinstance(a[0], list) and isinstance(a[0][0], int)

>>> is_list_of_list_of_int([[1,2,3],[2,3,4]])
True
>>> is_list_of_list_of_int(5)
False

另一种方法是“请求宽恕胜于许可”。

代码语言:javascript
运行
AI代码解释
复制
def get_value_safe(a, i, j):
    try:
        return a[i][j]
    except TypeError:
        print('not a list of list')
        return None

>>> get_value_safe([[1,2,3],[2,3,4]], 1, 2)
4
>>> get_value_safe([1,2,3], 1, 2)
not a list of list
票数 0
EN

Stack Overflow用户

发布于 2015-07-16 09:53:23

我必须承认,这是我多年来第一次接触递归,但我认为检查对象的每一项的唯一方法是递归。或者动态规划,而我不喜欢动态规划:P

我绝对不喜欢解析字符串,所以我选择只传递类型。

代码语言:javascript
运行
AI代码解释
复制
def typecheck(obj, *args):
    if isinstance(obj, args[0]):
        if len(args) == 1: # last one to check. Base case.
            return True
        if hasattr(args[0], "__iter__"): 
            #in other words, am I an iterator?
            for i in obj:
                if not typecheck(i, *args[1:]):
                    return False
            return True
     else: 
        return False

In [23]: typecheck([[3,3, "a"]],list, list, int)
Out[23]: False

In [24]: typecheck([[3,3]],list, list, int)
Out[24]: True

添加logging应该非常简单,因为一个变体只会告诉您对象在哪里是错误的类型。

票数 1
EN

Stack Overflow用户

发布于 2015-07-16 08:37:49

假设您只想检查列表和基本类型,答案的第一部分是将类型规范解析为类型列表(从父类型到子类型):

代码语言:javascript
运行
AI代码解释
复制
import __builtin__
def parse_spec(str_spec):
    return [getattr(__builtin__, x) for x in str_spec.rstrip('>').split('<')]

第二部分是验证指定的值是否符合规范:

代码语言:javascript
运行
AI代码解释
复制
def validate(value, spec):
    for t in spec:
        if not isinstance(value, t):
            return False
        try:
            value = value[0]
        except TypeError:
            pass
    return True

因此,您可以按照以下方式组合这些功能:

代码语言:javascript
运行
AI代码解释
复制
>>> validate([10], parse_spec('list<int>'))
True
>>> validate([10], parse_spec('int'))
False
>>> validate([['something']], parse_spec('list<list<str>>'))
True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31458695

复制
相关文章
关于python类中描述器-类型检查、延迟和代理
python学习深水区,仅供自己参考 # 类型检查的描述器 class Typed: #变量名称,期待的数据类型 def __init__(self, name, expected_type): self.name = name self.expected_type = expected_type #获取字典里的变量名称 def __get__(self, instance, cls): if instance is None:
python与大数据分析
2022/03/11
4300
【Python】列表 List ① ( 数据容器简介 | 列表 List 定义语法 | 列表中存储类型相同的元素 | 列表中存储类型不同的元素 | 列表嵌套 )
Python 中的 数据容器 数据类型 可以 存放多个数据 , 每个数据都称为 元素 , 容器 的 元素 类型可以是任意类型 ;
韩曙亮
2023/10/11
3.3K0
【Python】列表 List ① ( 数据容器简介 | 列表 List 定义语法 | 列表中存储类型相同的元素 | 列表中存储类型不同的元素 | 列表嵌套 )
Python基本数据类型__列表
在Python中列表用[]来表示,中间的元素可以是任何类型,用逗号分隔。列表是可变类型。
py3study
2020/01/15
4590
python--基本类型之列表
列表:是python以及其他语言中最常用的数据结构之一。python用 [] 来解析列表 列表是可变的。--可以改变列表的内容 可以用切片
py3study
2020/01/19
3980
python列表类型
例如下面的几个列表中,有存储数值的、字符串的、内嵌列表的。不仅如此,还可以存储其他任意类型。
py3study
2020/01/20
1.3K0
python中列表类型常用操作
这里的a[1:4]指取从a这个列表的下标为1的索引开始(即第二个元素),到下标为3的索引的元素,即为[2,3,4]
py3study
2020/01/07
9540
TypeScript基础——基本类型检查
JavaScript设计之初只是为了补充Java的,在浏览器上做一些小的效果,并不是为了做大型复杂项目而开发的,js本身也是有很多缺陷的,关于为什么要用TS,小伙伴们可以瞅瞅这篇文章 :我们为什么要学习TypeScript ?
程序员法医
2022/08/11
1.4K0
TypeScript基础——基本类型检查
Python小姿势 - # Python中的类型检查
```python 声明一个整型变量 num: int 声明一个字符串变量 name: str
不吃西红柿
2023/05/04
8470
Python装饰器实现函数动态类型检查
类型检查主要使用了inspect库。本次代码运行环境是python3.5.2。inspect库的使用方法在下面介绍。
职场亮哥
2020/10/10
8560
【Redis】List列表类型基本使用
1. 简介 单键多值 Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。 它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。 [在这里插入图片描述] 2. 常用命令 从左边插入一个或多个值 lpush <key> <value1> <value2> <value3> ... [在这里插入图片描述] 按照索引下标获得元素(从左到右) lrange <key> <start> <stop> [在这里插入图片描述]
兮动人
2022/02/23
7180
【Python3】基本数据类型-列表(
例: name_list = ['alex', 'seven', 'eric'] 或 name_list = list(['alex', 'seven', 'eric']) 基本操作: 索引 切片 追加 删除 长度 切片 循环 包含 详细介绍 如下 ~ append 追加 user_list = ['xmzncc','asd','fcc'] user_list.append('123') print(user_list) clear 清空 user_list = ['xmzncc','asd','fcc']
py3study
2020/01/02
3000
Python小姿势 - # 如何在Python中实现基本的数据类型
Python是一门面向对象的编程语言,基本的数据类型包括整数、浮点数、字符串、布尔值、列表、元组、字典等。
不吃西红柿
2023/05/02
1.3K0
Python基础语法-基本数据类型-列表
在 Python 中,列表(list)是一种常见的基本数据类型,它可以用于存储一组有序的数据,包括数字、字符串、布尔值等等。列表非常灵活,可以通过索引、切片、迭代等多种方式来访问和操作其中的元素。本文将详细介绍 Python 中的列表类型,包括创建列表、列表的基本操作、列表的方法和常见应用场景等。
玖叁叁
2023/04/16
2650
Java基本类型和包装类型
POJO 的英文全称是 Plain Ordinary Java Object,翻译一下就是,简单无规则的 Java 对象,只有属性字段以及 setter 和 getter 方法,示例如下。
崔笑颜
2020/06/08
9010
一、python学习笔记-基本数据类型-列表
""" 列表是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推 """ 创建和删除 # 创建列表 list1 = [1, 2, 'abc'] # 打印内容 print(list1) # 打印类型 print(type(list1)) # 删除 del list1 列表增删改查 """列表查询(切片) 1、执行下面python命令,对列表按位置进行截取,正数数字代表从左往右数,负数代表从右往左数,正数从0开始,负数从-1开始(
堕落飞鸟
2022/01/11
4460
为你的 JavaScript 项目添加智能提示和类型检查
最近在做项目代码重构,其中有一个要求是为代码添加智能提示和类型检查。智能提示,英文为 IntelliSense,能为开发者提供代码智能补全、悬浮提示、跳转定义等功能,帮助其正确并且快速完成编码。说起来,JavaScript 作为一门动态弱类型解释型语言,变量声明后可以更改类型,并且类型在运行时才能确定,由此容易产生大量代码运行中才能发现的错误,相比 Java 等静态类型语言,开发体验上确实差了一截。更烦躁的是,智能提示就是依赖于静态类型检查的,所以在以前,指望 JavaScript 的智能提示完善度追上 Java 基本不可能。当然,时代在进步,TypeScript 已经问世许久,为 JavaScript 带来了静态类型检查以及其他诸多特性。JavaScript 的智能提示也已有了解决方案。调研了一段时间后,下文以 VSCode 编辑器作为开发工具,介绍一下如何为 JavaScript 加上智能提示以及类型检查。
逆葵
2019/04/25
4K0
为你的 JavaScript 项目添加智能提示和类型检查
Python基本类型
     Python是一门动态语言,解释执行,所有错误都是运行时产生的,即使有错误和异常,只要没有被执行到也不会有错,比如调用不存在的方法;类型是隐式的,也即无需变量类型声明;类型是动态,运行时根据变量指向的内容来决定类型,但是Python是强类型语言,即每个变量都是有类型的。
py3study
2020/01/06
9770
Python数据类型(列表)
append : 增加一个元素在列表的最后** **insert : 在指定位置添加元素** **extend : 合并两个列表
亦小河
2022/11/14
6020
python静态类型检查工具mypy
mypy 是 Python 的一个可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。mypy 将 Python 的表达能力和便利性与强大的类型系统和编译时类型检查相结合。mypy 类型检查标准 Python 程序;使用任何 Python VM 运行它们,基本上没有运行时开销。
zy010101
2022/05/05
1K0
点击加载更多

相似问题

Python -检查变量是否为类型类型

11

如何在方法中设置参数,如设置类型

21

用于检查返回类型的Python装饰器:特别是检查嵌套的事物(如List[str])]]

14

如何在Python中检查列表类型别名?

113

检查类型是否为列表

10
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档