假設我有一個混合了 True 和 False 的二維串列。我想創建一個函式,給我一個額外的引數,它應該是要輸出的元素的數量。輸出應該是這樣的:例如,如果我輸入3一個數字,應該顯示 3 x True 一個接一個位于的行和列。所以只有行和第一列 例如,在下面的串列中:
3 x True in row: 1 and col: 3
lst = [[False, True, False, True, True, False],
[False, True, False, True, True, True],
[True, False, True, True, True]]
我嘗試了幾種選擇,但從未找到解決方案。我在這里有另一個小例子,但當然我得到了錯誤的輸出:
def baz(count):
for row in range(len(lst)):
for col in range(len(lst[row])):
if lst[row][col] == lst[row][(col count) % len(lst[row])] and lst[row][col] is True:
return (row, col)
print(baz(3))
uj5u.com熱心網友回復:
您可以使用all它來簡化代碼,True如果 iterable 中的所有值都是 else ,它True會回傳False。
lst = [[False, True, False, True, True, False],
[False, True, False, True, True, True],
[True, False, True, True, True]]
def baz(count):
for row in range(len(lst)):
if len(lst[row]) < count:
continue
for col in range(len(lst[row])-count 1):
if all(lst[row][col:col count]):
return (row, col)
return None
print(baz(3))
print(baz(2))
印刷 -
(1, 3)
(0, 3)
請注意,給定的 可以有多個匹配count項,因此該函式回傳找到的第一個匹配項。
此外,對于 的高值count,上面的代碼不是最優的(因為在每個步驟中,O(count)當我們呼叫 時,我們都在做作業all()。所以如果您擔心性能,您可以使用下面的函式 -
def baz(count):
for row in range(len(lst)):
if len(lst[row]) < count:
continue
prev_true = -1
for col in range(len(lst[row])):
if not lst[row][col]:
prev_true = col
continue
if col - prev_true == count:
return (row, col-count 1)
return None
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/422815.html
標籤:
下一篇:電子郵件回復率的貝葉斯平均值
