部分命令列表Python

时间:2017-06-27 17:22:57

标签: python list pandas

我正在开发一个python项目,我希望以某种模式订购pandas数据帧的标题。 我的结果列表如下所示:

Match1 attribute1 attribute2 attribute3 ... attributeN Score1 Match2 attributeM Score2 ... Match3 Score3

我想按照以下模式订购列表中的元素

Match1 Score1 Match2 Score2 Match3 Score3 attribute1 attribute2 attributeN ...

我知道列表中有多少对匹配/得分。但我不知道会有多少属性(我不需要订购它们)。这些都是由特定的数据结构决定的。有没有办法让我重新排列这样一个列表的顺序?

谢谢!

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用sorted,您可以按如下方式指定密钥;第一个键排序属性列到结尾,第二个键将结果按字符串末尾的数字排序:

# cols = df.columns
cols = ['Match1', 'attribute1', 'attribute2', 'attribute3', 'attributeN', 'Score1', 'Match2', 'attributeM', 'Score2', 'Match3', 'Score3']

import re
sorted(cols, key=lambda x: (not bool(re.match('match|score', x, flags=re.I)), re.sub(r'.*(\d+)$', r'\1', x)))

#['Match1',
# 'Score1',
# 'Match2',
# 'Score2',
# 'Match3',
# 'Score3',
# 'attribute1',
# 'attribute2',
# 'attribute3',
# 'attributeM',
# 'attributeN']

答案 1 :(得分:1)

以下是一些以

开头的不完整代码
index = 0
for i in range(num_matches_and_scores]:
  match1 = ??? # First instance of whatever you are trying to find
  list1.remove(match1)
  list1.insert(index, match1)
  index += 1
  score1 = ???
  list1.remove(score1)
  list1.inset(index, score1)
  index += 1