3 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
關(guān)于PyCharm警告(問(wèn)題是關(guān)于的)
雖然2次指數(shù)(C ^)被高亮顯示,讓用戶覺(jué)得這是問(wèn)題,它不是有關(guān),在所有。
通常,列表是同類容器,這意味著它們包含相同類型的元素。
PyCharm評(píng)價(jià)v_f_vector為的列表的列表INT小號(hào)(并因此v_f_vector[b][c]
作為INT)。嘗試為其分配一個(gè)字符串,會(huì)破壞列表的同質(zhì)性,因此會(huì)發(fā)出警告。
嘗試為其分配虛擬值(例如0.01f
, ()
, []
, ...),警告文本將更改,如下圖所示:
作為一種快速(和骯臟)的解決方法,如果列表將包含字符串,您可以執(zhí)行以下操作:
v_f_vector = [["", "", "", ""], ["", "", "", "", "", "", "", ""], ["", "", "", ""], ["", "", "", "", ""]]
關(guān)于導(dǎo)致此問(wèn)題的代碼
聲明具有特定內(nèi)容的列表,然后返回并更改該內(nèi)容(基于另一個(gè)(類似結(jié)構(gòu)的)列表)是違反直覺(jué)的。
你(完)目標(biāo),可以實(shí)現(xiàn)一個(gè)代碼行(最Python的IC形式),由的列表解析(檢查[Python的3.Docs]:列表綜合)。由于您的列表嵌套級(jí)別為 2,因此理解將是:
>>> aggregated_vector = [[0, 8, 0, 6], [0, 1, 0, 0, 0, 0, 9, 0], [0, 0, 10, 0], [0, 10, 0, 0, 0]]
>>> class_count = 10
>>>
>>> vote_fraction = [[f"{(item1 / class_count): .2F}" for item1 in item0] for item0 in aggregated_vector]
>>> print(vote_fraction)
[[' 0.00', ' 0.80', ' 0.00', ' 0.60'], [' 0.00', ' 0.10', ' 0.00', ' 0.00', ' 0.00', ' 0.00', ' 0.90', ' 0.00'], [' 0.00', ' 0.00', ' 1.00', ' 0.00'], [' 0.00', ' 1.00', ' 0.00', ' 0.00', ' 0.00']]
>>>
>>> # Or, if you REALLY need to have a function
...
>>> def get_vote_fraction(cl_count, ag_vector):
... return [[f"{(item1 / cl_count): .2F}" for item1 in item0] for item0 in ag_vector]
...
>>>
>>> print(get_vote_fraction(class_count, aggregated_vector))
[[' 0.00', ' 0.80', ' 0.00', ' 0.60'], [' 0.00', ' 0.10', ' 0.00', ' 0.00', ' 0.00', ' 0.00', ' 0.90', ' 0.00'], [' 0.00', ' 0.00', ' 1.00', ' 0.00'], [' 0.00', ' 1.00', ' 0.00', ' 0.00', ' 0.00']]
注意:您的代碼也可以進(jìn)行調(diào)整,但我建議使用推薦的變體。

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為警告來(lái)自您用字符串替換整數(shù)值的事實(shí)。當(dāng)我嘗試v_f_vector使用'0'而不是實(shí)例化時(shí)0,PyCharm 沒(méi)有顯示任何警告:
v_f_vector = [['0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0'], ['0', '0', '0', '0', '0']]
但是,這可能不是解決問(wèn)題的最佳方法。我建議對(duì)您的代碼進(jìn)行這樣的重構(gòu):
def get_vote_fraction(cl_count, ag_vector):
v_f_vector = []
for b in range(0, len(ag_vector)):
v_f_vector.append([])
for c in range(0, len(ag_vector[b])):
v_f_vector[b].append(f"{(ag_vector[b][c] / cl_count): .2F}")
return v_f_vector
aggregated_vector = [[0, 8, 0, 6], [0, 1, 0, 0, 0, 0, 9, 0], [0, 0, 10, 0], [0, 10, 0, 0, 0]]
class_count = 10
vote_fraction = get_vote_fraction(class_count, aggregated_vector)
print(vote_fraction)
它將允許您在aggregated_vector不將這些更改反映到實(shí)例化的情況下進(jìn)行更改v_f_vector。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
你應(yīng)該使用 enumerate()
例子:
iterable = [1,2,3,4]
for i, v in enumerate(iterable):
print(i,v)
預(yù)期輸出
0 1
1 2
2 3
3 4
代替
for x in range(0, len(iterable)):
print(x, iterable[x])
抱歉,這并不是您問(wèn)題的真正答案,但這樣更易于閱讀,而且,枚舉將始終為您提供索引和值,或者如果它是字典,則是鍵和值。
可能還值得注意的是,將列表嵌套在字典中,然后為每個(gè)列表提供一個(gè)特定的鍵,以便您可以訪問(wèn)它們,這使人類可讀性更高。
只是深思熟慮
為了更清晰,假設(shè)您有 4 個(gè)向量,向量 a、b、x 和 y。您可以將它們各自的列表放在自己的字典鍵中,然后使用它們的鍵訪問(wèn)它們。
添加回答
舉報(bào)