簡體   English   中英

如何使用 Python 評估列表列表中索引的特定值?

[英]How to evaluate a particular value of an index in a list of lists using Python?

我得到了以下列表。

lst1 = [[77, 17, None, 77, 21], [49, 91, 96, 83, 72], [60, 70, 64, 27, 14], [70, 53, 94, 61, 60], [48, 18, None, 59, 84]]

如何在末尾添加另一個列表,指示每列是否至少有一個“無”值? 對於上述示例,output 應如下所示。

lst2 = [[77, 17, None, 77, 21], [49, 91, 96, 83, 72], [60, 70, 64, 27, 14], [70, 53, 94, 61, 60], [48, 18, None, 59, 84], [True, True, False, True, True]]

根據 lst1' 中的值,在末尾附加一個新列表[True, True, False, True, True]

通過考慮列值生成列表[True, True, False, True, True] 即,例如,第一個列表的第一個元素(77),第二個列表的第一個元素(91)等等。

當我們考慮內部列表的所有第一個元素時,我們看到沒有 None 值。 因此它是真實的。

問題有點不清楚,但我認為你想要這個,因為你正在嘗試確定是否沒有None跨列而不是行:

has_no_none = [None not in column for column in zip(*lst1)]
lst2 = lst1 + [has_no_none]

lst按預期以[True, True, False, True, True]結尾。

如果您在此操作后不需要lst1 ,則可以使用lst1.append(has_no_none)就地完成。

使用列表理解。

result = [True if None in x else False for x in lst1]
lst1.append(result)

如果子數組包含 None 返回 true,否則返回 False。

out = [True if None in val else False for val in lst1]

出去:

[True, False, False, False, True]

盡管您展示的 output 與您解釋的不同。

將每列的額外行初始化為True ,然后遍歷列表中的行,如果該行中的任何值為None ,則在額外行中的相應 position 處將值設置為False 然后您可以從輸入列表和額外的行構造整個 output 列表。

lst1 = [[77, 17, None, 77, 21],
        [49, 91, 96, 83, 72],
        [60, 70, 64, 27, 14], 
        [70, 53, 94, 61, 60], 
        [48, 18, None, 59, 84]]

summary = [True for _ in lst1[0]]

for row in lst1:
    for i, val in enumerate(row):
        if val is None:
            summary[i] = False

lst2 = lst1.copy() + [summary]

print(lst2)

給出(在插入換行符以提高可讀性之后):

[[77, 17, None, 77, 21],
 [49, 91, 96, 83, 72],
 [60, 70, 64, 27, 14],
 [70, 53, 94, 61, 60],
 [48, 18, None, 59, 84],
 [True, True, False, True, True]]

您可以使用所有 function 和列表理解在一行中執行此操作。 參考下面的代碼

lst1 = [[77, 17, None, 77, 21], [49, 91, 96, 83, 72], [60, 70, 64, 27, 14], [70, 53, 94, 61, 60], [48, 18, None, 59, 84]]

lst1.append( [all(p) for p in lst1] )

print(lst1)

Output 是

[[77, 17, None, 77, 21],
 [49, 91, 96, 83, 72],
 [60, 70, 64, 27, 14],
 [70, 53, 94, 61, 60],
 [48, 18, None, 59, 84],
 [False, True, True, True, False]]

由於您在談論專欄,因此這里是pandas版本:

df = pd.DataFrame(lst1)
bools = df.notnull().all().to_list()
lst2 = lst1 + [bools]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM