首页 > 解决方案 > 将列表值合并到 1 个字符串中

问题描述

我有这样的清单:

subsets = ["T10", "T12", "T13", "A15", "T23"]

我需要遍历这个列表,检查 T 后跟 A,如果发现它合并 T & A 即

这是我需要的新列表:

newset = ["T10", "T12", "T13, A15", "T23"]

我试图弄清楚如何遍历列表并检查最左边的值。我只需要一个 {left char of string of next list item} 的表达式——我想!

for i in range(len(subsets)):
  if {left char of string for next list item} = "A":
    newset.append(subset[i]+", "+ subset[i+1])
    i+=1
  else:
    newset.append(subset[i]) 

标签: python

解决方案


从您的项目构建一个新列表,并检查该列表中的最后一个项目是否以 开头T,当前是否以 开头A。如果是这样,请替换新列表中的最后一项:

it = iter(subsets)
result = [next(it)]
for elem in it:
    if elem[:1] == 'A' and result[-1][:1] == 'T':
        # preceding element is T.., this is A.., combine into a single string
        result[-1] = f'{result[-1]}, {elem}'
    else:
        result.append(elem)

我使用iter()andnext()有效地用第一个元素填充输出列表,并且使我们不必测试是否result至少有一个元素。

演示:

>>> subsets = ["T10", "T12", "T13", "A15", "T23"]
>>> it = iter(subsets)
>>> result = [next(it)]
>>> for elem in it:
...     if elem[:1] == 'A' and result[-1][:1] == 'T':
...         # preceding element is T.., this is A.., combine into a single string
...         result[-1] = f'{result[-1]}, {elem}'
...     else:
...         result.append(elem)
...
>>> result
['T10', 'T12', 'T13, A15', 'T23']

注意:这也会将连续 A*元素合并到前面的T元素中,因此[..., "T13", "A15", "A16", "T17", ...]结果为[..., "T13, A15, A16", "T17", ...].


推荐阅读