按条件连接列表中的字符串

时间:2018-09-29 17:23:38

标签: python list

我有这个字符串列表

listInfos = ['D D R: 17/10/2018', 'nothing past this date', 'D D R: 4/10/2018', 'D D R: 2/10/2018']

我想对其进行排序,以便结果为:

parsedList = ['D D R: 17/10/2018 & nothing past this date', 'D D R: 4/10/2018', 'D D R: 2/10/2018']

'D D R ..'之后的每个元素都应与其关联 直到,我们有一个 'D D R ..'

有快速的命令来做这样的事情吗? 我已经尝试过了,但是没有用。

parsedList = []
for i in range(len(listeInfos)):
        tmpList = []
        if re.match(r'^D D R', listeInfos[i]):
                tmpList.append(listeInfos[i])
                while not(re.match(r'^D D R', listeInfos[i+1])):
                        tmpList.append(listeInfos[i])
                        i += 1
                else:
                        parsedList.append(tmpList)
                        break
                break
        i = j

谢谢!

3 个答案:

答案 0 :(得分:2)

  

问题:“ D D R ..”之后的每个元素都应与其关联,直到我们有了新的“ D D R ..”

不要与Indizies作战! 例如:

  

注意listInfos 必须'D D R'开始!

listInfos = ['D D R: 17/10/2018', 'nothing past this date', 'D D R: 4/10/2018', 'D D R: 2/10/2018']

parsedList = []

# Loop the List of Strings
for s in listInfos:
    # Condition not
    if not s.startswith('D D R'):
        # if True concat 's' with the last String in the List
        parsedList[-1] += " " + s
    else:
        # Append 's' as a new String to the List
        parsedList.append(s)

for s in parsedList:
    print(s)
  

输出

D D R: 17/10/2018 nothing past this date
D D R: 4/10/2018
D D R: 2/10/2018`

经过Python:3.5.3

的测试

答案 1 :(得分:1)

如果您希望列表仅包含排序日期,请使用:

parsedList = sorted([date for date in listInfos if date.startswith('D D R')],
                key=lambda date: int(date[-4:] + date[-7:-5] + date[-10:-8]), reverse=True)

说明:

  1. 我们在此处插入以您的自定义前缀'D D R'开头的日期:

    [date for date in listInfos if date.startswith('D D R')]
    
  2. 现在,我们知道按日期对列表进行排序,同时知道反向日期是整数是关键,因为例如:20181012 <20181226

    key=lambda date: int(date[-4:] + date[-7:-5] + date[-10:-8]
    
  3. 接下来,我们将结果反转,以升序排列(可选)

希望有帮助。

答案 2 :(得分:1)

您可以在一个表达式中编写它。我怀疑它可读性强,只是为了好玩而已:

hashcode

我们从当前索引之后的下一个索引(通过from itertools import takewhile parsedList = [ (el + ' & ' + ' '.join( takewhile(lambda x: not x.startswith('D D R'), listInfos[pos + 1:]) ) ).rstrip(' &') for pos, el in enumerate(listInfos) if el.startswith('D D R') ] print(parsedList) # ['D D R: 17/10/2018 & nothing past this date', 'D D R: 4/10/2018', 'D D R: 2/10/2018'] 获取索引)开始,通过itertools.takewhile在两个DDR之间找到一个子列表。