为了账号安全,请及时绑定邮箱和手机立即绑定

根据相邻的元组值连接python列表元组元素

根据相邻的元组值连接python列表元组元素

炎炎设计 2021-05-30 12:53:41
我有一个类似的列表:x = [(0, 'Add:'), (1, 'Net'), (2, 'Profit'), (4, 'Less:'), (5, 'Dep')]我想将相邻的第一个元组元素的第二个元组元素值连接起来,例如具有第一个元素0、1、2的元组应连接到新字符串“ Add:Net Profit”中,并将具有第一个元素4、5的元组连接成新字符串“少: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: NetNet ProfitLess: Dep怎么了?
查看完整描述

3 回答

?
慕尼黑8549860

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']


查看完整回答
反对 回复 2021-06-01
?
HUH函数

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))


查看完整回答
反对 回复 2021-06-01
?
守候你守候我

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)))


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信