[英]max row sequence from sorted list for each index
我已經按索引(a,b,c)存儲了輸入,然后按升序(按基本順序)存儲了輸入,如下所示:
input=['3a', '4a', '5a', '6a', 'Ca', 'Da', '4b','5b', '6b', '7b', '7c', '8c']
我的基礎上按升序排列的數字順序是:
"123456789ABCD"
現在我要做的是為每個索引(a,b,c)選擇行長大於4的項目並將其添加到輸出列表中(即找到每個索引(a,b, c),實際上我需要每個索引的所有大於4的行組合,但是我有一個想法,如果我找到每個索引的最大LEN行序列(a,b,c),該如何組合
因此,對於上面的輸入,期望以下輸出:
[['3a','4a','5a','6a'],['4b','5b','6b','7b']]
這是我嘗試使用的代碼,代碼在python中:
input=['3a','4a','5a','6a','Ca','Da','4b','5b','6b','7b','7c','8c']
digits = '123456789ABCD'
digit_map = {d:i for i, d in enumerate(digits)}
matches=[]
temp=[]
prev = 789
print hands
for n in input:
if digit_map[n[0]] == prev + 1:
matches.append(n)
print matches
else:
if len(matches) >= 4:
temp.append(matches)
print temp
matches = [n]
print matches
prev = digit_map[n[0]]
print temp
像插入一個額外的循環? (這可以進一步優化)
input=['3a','4a','5a','6a','Ca','Da','4b','5b','6b','7b','7c','8c']
digits = '123456789ABCD'
digit_map = {d:i for i, d in enumerate(digits)}
print hands
temp = []
for letter in ['a','b','c']:
prev = 789
matches=[]
filtered = [i for i in input if i[1]==letter]
for n in filtered:
if digit_map[n[0]] == prev + 1:
matches.append(n)
print matches
else:
if len(matches) >= 4:
temp.append(matches)
print temp
matches = [n]
print matches
prev = digit_map[n[0]]
print temp
print temp
lst=['3a', '4a', '5a', '6a', 'Ca', 'Da', '4b','5b', '6b', '7b', '7c', '8c']
prev = lst[0][-1]
streak = 1
streaklst = [lst[0]]
matches = []
for x in lst[1:]:
if x[-1] == prev and streak < 4:
streak += 1
streaklst.append(x)
else:
if streak == 4:
matches.append(streaklst)
streaklst = [x]
streak = 1
prev = x[-1]
print(matches)
將打印
[['3a', '4a', '5a', '6a'], ['4b', '5b', '6b', '7b']]
注意:
lst=['3a', '4a', '5a', '6a', 'Ca', 'Da', 'Aa', 'Ba', '4b','5b', '6b', '7b', '7c', '8c']
它將打印
[['3a', '4a', '5a', '6a'], ['Ca', 'Da', 'Aa', 'Ba'], ['4b', '5b', '6b', '7b']]
也就是說,它將找到所有4個條紋。您需要告訴我們是否要這樣做,因為您的問題是想要整個條紋,還是將長度減少為4的條紋,還是要將長度為4的所有條紋(或更高)。 至少對我來說,您的示例輸出和您要編寫的內容有所不同。
要找到超過四個的條紋並將其存儲,您可以執行以下操作:
lst=['3a', '4a', '5a', '6a', 'Ca', 'Da', 'Aa', 'Ba', '4b','5b', '6b', '7b', '7c', '8c']
prev = lst[0][-1]
streak = 1
streaklst = [lst[0]]
matches = []
for x in lst[1:]:
if x[-1] == prev:
streak += 1
streaklst.append(x)
else:
if streak >= 4:
matches.append(streaklst)
streaklst = [x]
streak = 1
prev = x[-1]
print(matches)
哪個會打印
[['3a', '4a', '5a', '6a', 'Ca', 'Da', 'Aa', 'Ba'], ['4b', '5b', '6b', '7b']]
len(matches)
現在將為您提供條紋數量> = 4。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.