[英]How to find the index for all the elements in a list with a particular value in 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.