亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何掃描以前的列表值以添加新的復合列表值?

如何掃描以前的列表值以添加新的復合列表值?

慕婉清6462132 2021-11-23 19:37:31
我的問題有點難以用語言解釋,所以請耐心等待,我會盡力而為。我有一個數組 'a' 并且我正在嘗試編寫一段代碼,該代碼將告訴每個組件何時工作以及多個組件是否同時發生故障。如果組件顯示 C1NW 代表“組件 1 不工作”,您可以看到組件何時發生故障,或者當組件正在工作時,它會顯示 C2W 代表“組件 2 工作”。正如您從列表 'a' 中看到的,它們已經按時間順序排序,因此在時間 1067 組件 2 不工作。a = [ [1067.8420440505633, 'C2NW'], [1287.3506292298346, 'C1NW'], [1363.9930359848377, 'C2W'], [1483.1371597306722, 'C1W'], [1767.6648314715849, 'C2NW']理想情況下,我想要一個帶有“組件工作與否”數組的“時間線”數組進行比較。本質上,我想要一個看起來像這樣的數組:TimeLine = [1067.8420440505633, 1287.3506292298346, 1363.9930359848377, 1483.1371597306722, 1767.6648314715849] WorkingOrNot = [ C2NW, C1NWC2NW, C1NWC2W, C1WC2W, C1WC2NW]WorkingOrNot 數組來自每個點,因此查看“a 的列表 2”,您會注意到 C1 沒有工作,但 C2 仍然沒有工作(a 的列表 1 顯示 C2 沒有工作,但它沒有工作) t 開始工作,直到 a) 的列表 3,因此輸出應該是 C1NWC2NW,因為此時兩個組件都不工作。我知道我可以通過以下方式獲得“時間線”數組:TimeLine = [item[0] for item in a]但是,我不確定如何獲取另一個數組,因為這意味著掃描列表以檢查某個組件是否正常工作。我希望我已經很好地解釋了這一點,如果你想讓我改寫的話,請發表評論,因為我真的很難解釋這一點。提前致謝,本
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

我的問題有點難以用語言解釋,所以請耐心等待,我會盡力而為。我有一個數組 'a' 并且我正在嘗試編寫一段代碼,該代碼將告訴每個組件何時工作以及多個組件是否同時發生故障。如果組件顯示 C1NW 代表“組件 1 不工作”,您可以看到組件何時發生故障,或者當組件正在工作時,它會顯示 C2W 代表“組件 2 工作”。正如您從列表 'a' 中看到的,它們已經按時間順序排序,因此在時間 1067 組件 2 不工作。


a = [ [1067.8420440505633, 'C2NW'], [1287.3506292298346, 'C1NW'], [1363.9930359848377, 'C2W'], [1483.1371597306722, 'C1W'], [1767.6648314715849, 'C2NW']

理想情況下,我想要一個帶有“組件工作與否”數組的“時間線”數組進行比較。本質上,我想要一個看起來像這樣的數組:


TimeLine = [1067.8420440505633, 1287.3506292298346, 1363.9930359848377, 1483.1371597306722, 1767.6648314715849]

WorkingOrNot = [ C2NW, C1NWC2NW, C1NWC2W, C1WC2W, C1WC2NW]

WorkingOrNot 數組來自每個點,因此查看“a 的列表 2”,您會注意到 C1 沒有工作,但 C2 仍然沒有工作(a 的列表 1 顯示 C2 沒有工作,但它沒有工作) t 開始工作,直到 a) 的列表 3,因此輸出應該是 C1NWC2NW,因為此時兩個組件都不工作。我知道我可以通過以下方式獲得“時間線”數組:


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'),然后連接所有這些。


查看完整回答
反對 回復 2021-11-23
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

您只需要在時間線中向前移動時,保持兩個組件的當前狀態。


from functools import reduce


timeLine     = []

workingOrNot = []


states     = [ (item[0],item[1][:2],item[1][2:]) for item in a ]

combined = dict()

for time,component,state in states:

    combined[component] = state

    timeLine.append(time)

    components = "".join(sorted("".join(s) for s in combined.items()))

    workingOrNot.append(components)

請注意,如果您的組件標識符和工作狀態是單獨的字段,這會更簡單(這實際上是我在處理數據之前必須做的)


查看完整回答
反對 回復 2021-11-23
  • 2 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號