我有这个字符串列表:
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
谢谢!
答案 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)
说明:
我们在此处插入以您的自定义前缀'D D R'开头的日期:
[date for date in listInfos if date.startswith('D D R')]
现在,我们知道按日期对列表进行排序,同时知道反向日期是整数是关键,因为例如:20181012 <20181226
key=lambda date: int(date[-4:] + date[-7:-5] + date[-10:-8]
接下来,我们将结果反转,以升序排列(可选)
希望有帮助。
答案 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之间找到一个子列表。