150*_*941 6 python arrays list python-3.x
我的问题有点难以用语言解释,所以请在我努力的同时忍受.我有一个数组'a',我正在尝试编写一段代码,它将告诉每个组件何时工作以及多个组件是否一次失败.您可以看到组件出现故障时,如果它显示C1NW,因为它代表"组件1不工作"或组件工作时它会说C2W代表"组件2工作".正如您从列表'a'中看到的那样,它们已经按时间顺序排序,所以在1067时组件2不起作用.
a = [ [1067.8420440505633, 'C2NW'], [1287.3506292298346, 'C1NW'], [1363.9930359848377, 'C2W'], [1483.1371597306722, 'C1W'], [1767.6648314715849, 'C2NW']
理想情况下,我想要一个'Time Line'数组,使用'Component Working or Not'数组进行比较.基本上,我想要一个看起来像这样的数组:
TimeLine = [1067.8420440505633, 1287.3506292298346, 1363.9930359848377, 1483.1371597306722, 1767.6648314715849]
WorkingOrNot = [ C2NW, C1NWC2NW, C1NWC2W, C1WC2W, C1WC2NW]
WorkingOrNot数组来自每个点,因此查看'列表2'你会注意到C1没有工作,但是C2仍然没有工作(列表1显示C2不工作但它没有' t开始工作直到a)的列表3因此输出应为C1NWC2NW,因为此时两个组件都不工作.我知道我可以通过以下方式获得'Time Line'数组:
TimeLine = [item[0] for item in a]
但是,我不知道如何获取其他数组,因为这意味着扫描列表后面以检查某个组件是否正常工作.我希望我已经解释得这么好,如果不是请你评论,如果你想我改写,因为我真的很难解释这一点.
提前谢谢,本
尝试这个:
import re
a = [ [1067.8420440505633, 'C2NW'], [1287.3506292298346, 'C1NW'], [1363.9930359848377, 'C2W'], [1483.1371597306722, 'C1W'], [1767.6648314715849, 'C2NW'] ]
Timeline, statuses = zip(*a)
WorkingOrNot = []
current_statuses = {}
# Regex pattern to extract component and working/not working status
pattern = re.compile(r'(C\d+)(\w+)')
for status in statuses:
    match = pattern.search(status)
    # Set the key corresponding to component to the status (W or NW)
    current_statuses[match[1]] = match[2]
    WorkingOrNot.append(''.join(map(''.join, sorted(current_statuses.items(), key=lambda kv: int(kv[0][1:])))))
print(WorkingOrNot)
# ['C2NW', 'C1NWC2NW', 'C1NWC2W', 'C1WC2W', 'C1WC2NW']
该代码是相当不言自明的。唯一令人困惑的部分可能是
Timeline, statuses = zip(*a)
这相当于
TimeLine = [item[0] for item in a]
statuses = [item[1] for item in a]
还有这一行:
WorkingOrNot.append(''.join(map(''.join, sorted(current_statuses.items(), key=lambda kv: int(kv[0][1:])))))
这只是将输出格式化为字典形式所需的格式。对组件 ID 的字典进行排序,连接键(组件)和值('W'或'NW'),然后连接所有这些。