You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码报错'type' object has no attribute '__getitem__'及括号转数组问询

解决你的报错与括号转数组问题

首先,先搞定你遇到的 'type' object has no attribute '__getitem__' 报错——这是因为你写了 set['(()())'],set 是Python的内置类型,创建集合必须用圆括号而非方括号,也就是 set('(()())')。不过看你的需求是要把括号转为数组而非集合/列表,那咱们直接跳过集合,直接生成数组类型就行。

一、括号转数组的两种实现方式

根据你的需求,这里提供两种数组实现方案:

1. 使用Python标准库array(原生数组类型)

import array
# 将括号字符串转为Unicode字符数组
brackets_array = array.array('u', '(()())')

2. 使用numpy数组

import numpy as np
# 直接将字符串转为numpy字符数组
brackets_np = np.array('(()())', dtype='U1')
# 或者先转列表再转数组,效果一致
brackets_np = np.array(list('(()())'), dtype=str)

二、修复代码中的其他问题

你的代码里还有几个语法和逻辑错误,我一起帮你修正:

  1. exp=0|1|0|1 是语法错误,| 是位运算符,这里应该写成字符串形式 exp="0|1|0|1"
  2. Python列表没有 push() 方法,要添加元素得用 append()
  3. evaluate() 里的 eval 用法错误,它只能处理单个表达式字符串,不能直接接收列表
  4. push(brackets) 逻辑不对,应该把当前遍历到的符号推入栈,而不是整个括号序列

修正后的完整代码示例:

from functools import reduce
import array
import numpy as np

Stack = []
StackSize = 20
arr = []
exp = "0|1|0|1"  # 修正为字符串格式
# 把括号转为numpy数组(满足你要数组而非列表的需求)
brackets = np.array('(()())', dtype='U1')
print(type(brackets))  # 输出<class 'numpy.ndarray'>

def push(symbol):
    if len(Stack) < StackSize:
        Stack.append(symbol)  # 用append替代不存在的push方法

def pop():
    if len(Stack) > 0:
        Stack.pop()
        evaluate()

def evaluate():
    # 修正eval的使用方式,逐个计算分段表达式
    expressions = [exp[0:x] for x in range(3, len(exp) + 1, 2)]
    for expr in expressions:
        print(f"表达式 {expr} 的计算结果:{eval(expr)}")

def main():
    for symbol in brackets:
        if symbol == '(':
            push(symbol)  # 推入当前符号而非整个括号序列
        elif symbol == ')':
            pop()

if __name__ == '__main__':
    main()

三、关键说明

  • 如果你不想用numpy,换成标准库的array.array只需要把brackets那行替换成 brackets = array.array('u', '(()())'),后续遍历逻辑完全一致。
  • 你最初的报错根源是误用了类的调用方式,set是类必须用set(iterable)创建实例,而你实际需要的是数组,所以直接用数组类型更贴合需求。

内容的提问来源于stack exchange,提问作者Anwesha Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:58:21