[英]Conditionally concatenate string values of a tuple in a list in python based on the elements
[英]Joining python list tuple elements based on adjacent tuple values
我有一个像这样的清单:
x = [(0, 'Add:'), (1, 'Net'), (2, 'Profit'), (4, 'Less:'), (5, 'Dep')]
我想将相邻的第一个元组元素的第二个元组元素值连接起来,例如具有第一个元素0、1、2的元组应连接到新字符串“ Add:Net Profit”中,并且将具有第一个元素4、5的元组连接成新的字符串字符串“ Less:Dep”。 我试过了 :
for i in range(len(x) -1):
if x[i+1][0] - x[i][0] == 1:
temp_str = x[i][1] + " " + x[i+1][1]
输出为:
Add: Net
Net Profit
Less: Dep
怎么了?
您应该将问题划分为子问题。 您希望组合单词组,因此您需要列表中的单词并在它们上使用join
。 您可以使用groupby
-function获得分组,为此您需要一个通用标准,例如,列表中的位置与元组中的数字之间的差异。
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))
这不是有史以来最优雅的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']
您想要首先获取字典的键并对其进行排序,然后开始对键进行迭代,直到找到一个间隙,然后可以将所有值连接起来:
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)))
对于元组列表,您可以使用:
x = [(0, 'Add:'), (1, 'Net'), (2, 'Profit'), (4, 'Less:'), (5, 'Dep')]
indices = sorted([x[i][0] for i in range(len(x))])
out = [[]]
pos = 0
for i in range(len(x)):
out[pos].append(x[i][1])
if indices[i]+1 not in indices and indices[i] != max(indices):
out.append([])
pos += 1
out = [' '.join(i) for i in out ]
print(out)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.