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

从连接设备信息生成器创建列表:如何合并循环子列表

问题:合并USB设备信息列表失败,仅保留最后一项

我用subprocess结合grep获取已连接USB设备的信息,每个设备的信息单独处理,通过生成器device_list()返回数据。循环处理生成器输出时,能正常打印每个设备的拆分结果(比如['item1']、['item2']),但循环结束后打印list1,却只剩最后一个设备的['item3'],想要得到合并后的列表['item1', 'item2', 'item3']。

现有代码结构

devices_connected = subprocess.getoutput(grep function to grab number of usb devices connected)

def device_list():
    for i in range(1, devices_connected +1):  # 原代码缺冒号,此处补全
        info_1 = subprocess.getoutput(grep 1) # 截取特定设备输出
        info_2 = subprocess.getoutput(grep 2)
        info_3 = subprocess.getoutput(grep 3)

        output = "{}|{}|{}".format(info_1, info_2, info_3)  # 原代码多余的join已移除
        yield output

for result in device_list():
    info_1, info_2, info_3 = result.split("|")
    list1 = info_1.split()
    list2 = info_2.split()
    list3 = info_3.split()
    print(f"{info_1} | {info_2} | {info_3}") # 正常打印单设备信息
    print(list1)
    # 输出:
    # ['item1'] 
    # ['item2'] 
    # ['item3']

# 循环外打印仅得到最后一项
print(list1)
# 输出:['item3']

问题原因

循环中每次执行list1 = info_1.split(),都是重新创建一个新列表并覆盖原list1变量。循环结束后,list1自然只保留最后一次赋值的结果。

解决方法

提前初始化空列表,在循环中把每个设备的拆分结果合并进去,而非每次重新赋值:

devices_connected = subprocess.getoutput(grep function to grab number of usb devices connected)

def device_list():
    for i in range(1, devices_connected +1):
        info_1 = subprocess.getoutput(grep 1)
        info_2 = subprocess.getoutput(grep 2)
        info_3 = subprocess.getoutput(grep 3)
        output = "{}|{}|{}".format(info_1, info_2, info_3)
        yield output

# 提前初始化总列表用于收集所有设备的对应信息
list1 = []
list2 = []
list3 = []

for result in device_list():
    info_1, info_2, info_3 = result.split("|")
    # 将当前设备的拆分结果合并到总列表
    list1.extend(info_1.split())
    list2.extend(info_2.split())
    list3.extend(info_3.split())
    print(f"{info_1} | {info_2} | {info_3}")

# 循环外打印合并后的完整列表
print(list1)
# 输出:['item1', 'item2', 'item3']

补充说明

  • 用extend()是因为info_1.split()返回列表(即使仅含一个元素),extend()会把列表内元素逐个加入总列表;若确定每个info_1拆分后只有一个元素,也可改用list1.append(info_1.split()[0])。
  • 原代码中output = "" .join("{}|{}|{}" .format(...))属于冗余操作,format已生成带分隔符的字符串,无需额外join。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:50:25