3 回答
TA贡献1818条经验 获得超11个赞
这不是有史以来最优雅的 Python 代码,但它是一个很好的起点。
x = {0: 'Add:', 1: 'Net', 2: 'Profit', 4: 'Less:', 5: 'Dep'}
keys = sorted(x)
strings = []
temp=x[keys[0]]
for i, j in zip(keys, keys[1:]):
if j-i==1:
temp += ' ' + x[j]
else:
strings.append(temp)
temp=x[j]
strings.append(temp)
print(strings) # ['Add: Net Profit', 'Less: Dep']
TA贡献1836条经验 获得超4个赞
您应该将问题划分为子问题。您想要组合单词组,因此您需要列表中的单词并join在它们上使用。您可以使用groupby- 函数获得组,为此您需要一个通用标准,例如列表中的位置和元组中的数字之间的差异。
from itertools import groupby
x = [(0, 'Add:'), (1, 'Net'), (2, 'Profit'), (4, 'Less:'), (5, 'Dep')]
for _, group in groupby(enumerate(x), lambda a:a[1][0] - a[0]):
words = [text for _, (_,text) in group] # extract words from data structure
print(' '.join(words))
TA贡献1802条经验 获得超10个赞
您想首先获取字典的键并对其进行排序,然后开始迭代键直到找到间隙,然后您可以连接所有值:
sorted_keys = sorted(x.keys())
start_index = 0
last_key = sorted_keys[0]
results = []
for i, cur_key in enumerate(sorted_keys):
if cur_key - last_key > 1:
# a gap has ended.
results.append(' '.join(x[k] for k in range(start_index, i)))
start_index = i
last_key = cur_key
if start_index != i:
results.append(' '.join(x[k] for k in range(start_index, i)))
添加回答
举报