我有一個陣列,我想在其中合并一個特定的索引。
["captain:", "robot", "alpha", "beta:", "gama", "delta:", "fighter", "test", "exp"]
這樣的想法,每個偶數元素都應該包含:而其余元素不應該包含:
我想要的輸出:
["captain:", "robot, alpha", "beta:", "gama", "delta:", "fighter, test, exp"]
考慮到陣列是可變的,例如,陣列可以是:
["captain:", "robot", "beta:", "game", "exp", "delta:", "fighter", "test"]
輸出應該是相同的,每個偶數都有 : 和奇數索引沒有 :
有人可以幫忙嗎?
uj5u.com熱心網友回復:
這是一個使用groupby:
import itertools
x = ["captain:", "robot", "alpha", "beta:", "gama", "delta:", "fighter", "test", "exp"]
new_list = []
for key, group in itertools.groupby(x, key = lambda string: string.endswith(':')):
if key: # in case you happen to consecutive values that end in a colon
new_list = list(group)
else: # these elements do not end in a colon
new_list.append(', '.join(group))
print(new_list)
# ['captain:', 'robot, alpha', 'beta:', 'gama', 'delta:', 'fighter, test, exp']
在這里,分組鍵檢查專案是否以 a 結尾":",如果是,key是True,否則是False。如果 的連續值key相同,則將它們放在同一組中。因此,包含冒號的字串后面的任意數量的元素都將被組合在一起。
uj5u.com熱心網友回復:
itertools.groupby() 你覆寫了嗎?
lst = ["captain:", "robot", "alpha", "beta:", "gama", "delta:", "fighter", "test", "exp"]
print([', '.join(g[1]) for g in itertools.groupby(lst, lambda s: s.endswith(':'))])
# ['captain:', 'robot, alpha', 'beta:', 'gama', 'delta:', 'fighter, test, exp']
uj5u.com熱心網友回復:
我不知道 groupby 功能。因此,如果有人感興趣,這是一種替代方法:
sample = ["captain:", "robot", "alpha", "beta:", "gama", "delta:", "fighter", "test", "exp"]
def find_next_index(sample, start):
for i in range(len(sample)):
if i>start and ":" in sample[i]:
return i, ", ".join(sample[start 1:i]), False
return start, ", ".join(sample[start 1:]), True
result = []
start = 0
while True:
x,y,z = find_next_index(sample, start)
result.append(sample[start])
result.append(y)
start = x
if z:
break
print(result)
輸出:
['captain:', 'robot, alpha', 'beta:', 'gama', 'delta:', 'fighter, test, exp']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413346.html
標籤:
下一篇:列印給定陣列的所有子陣列
