python-按字母顺序/类型/索引对列表排序
你好 我有以下清单:python-按字母顺序/类型/索引对列表排序,python,python-2.7,Python,Python 2.7,你好 我有以下清单: [篮球、足球、篮球、网球、篮球、网球] 如我们所见,我们有3个篮球,1个足球,2个网球 我想按字母顺序和运动类型对其进行排序,以便在末尾有一个索引,该索引根据运动类型递增,并添加后缀“team”。因此,我希望得到以下结果: [basketball-team1,basketball-team2,bastekball-team3,football-team1,network-team1,network-team2] 我们假设我们不知道列表值(我们不知道它有篮球/足球/网球) 我
[篮球、足球、篮球、网球、篮球、网球]
如我们所见,我们有3个篮球,1个足球,2个网球
我想按字母顺序和运动类型对其进行排序,以便在末尾有一个索引,该索引根据运动类型递增,并添加后缀“team”。因此,我希望得到以下结果:
[basketball-team1,basketball-team2,bastekball-team3,football-team1,network-team1,network-team2]
我们假设我们不知道列表值(我们不知道它有篮球/足球/网球)
我按照字母顺序对列表进行排序,我添加了后缀“team”,但我的问题是索引只会随着运动类型的增加而增加,我不知道怎么做
救命啊,普莱阿西!:)
ps:我有Python2.7您可以使用
集合。Counter
获取唯一元素和相关计数的字典,然后使用它来构建所需的输出列表。例如:
from collections import Counter
teams = ['basketball', 'football', 'basketball', 'tennis',
'basketball', 'tennis']
counts = Counter(teams)
out = []
for sport in sorted(counts.keys()):
count = counts[sport]
for i in range(1, count + 1):
out.append("{}-team{}".format(sport, i))
print(out)
给出:
['basketball-team1', 'basketball-team2', 'basketball-team3', 'football-team1', 'tennis-team1', 'tennis-team2']
您还可以使用
sorted(counts)
代替上述代码中的sorted(counts.keys())
。您可以使用collections.Counter
获取唯一元素和关联计数的字典,然后使用该字典构建所需的输出列表。例如:
from collections import Counter
teams = ['basketball', 'football', 'basketball', 'tennis',
'basketball', 'tennis']
counts = Counter(teams)
out = []
for sport in sorted(counts.keys()):
count = counts[sport]
for i in range(1, count + 1):
out.append("{}-team{}".format(sport, i))
print(out)
给出:
['basketball-team1', 'basketball-team2', 'basketball-team3', 'football-team1', 'tennis-team1', 'tennis-team2']
您还可以使用
sorted(counts)
代替上述代码中的sorted(counts.keys())
。这似乎是一个很好的使用。您可以对列表进行排序,然后让groupby对它们进行分组enumerate()
将为组中的每个项目提供索引(索引为零,因此需要向其中添加一个)
编辑f
字符串在python2.x中不起作用,但它的思想是相同的。只需输入字符串或使用您喜欢的格式:
['{}-team{}'.format(n, index+1) for k, g in groupby(sorted(l)) for index, n in enumerate(g)]
这似乎是一个很好的使用。您可以对列表进行排序,然后让groupby对它们进行分组
enumerate()
将为组中的每个项目提供索引(索引为零,因此需要向其中添加一个)
编辑f
字符串在python2.x中不起作用,但它的思想是相同的。只需输入字符串或使用您喜欢的格式:
['{}-team{}'.format(n, index+1) for k, g in groupby(sorted(l)) for index, n in enumerate(g)]
使用“唯一项目集”和“列表理解”创建所需内容:
data = ['basketball' , 'football' , 'basketball' , 'tennis' , 'basketball' , 'tennis' ]
output = [ sport + '-team' + str(i) for sport in sorted(set(data)) for i in range(1, data.count(sport) + 1)]
输出
['basketball-team1', 'basketball-team2', 'basketball-team3', 'football-team1', 'tennis-team1', 'tennis-team2']
使用“唯一项目集”和“列表理解”创建所需内容:
data = ['basketball' , 'football' , 'basketball' , 'tennis' , 'basketball' , 'tennis' ]
output = [ sport + '-team' + str(i) for sport in sorted(set(data)) for i in range(1, data.count(sport) + 1)]
输出
['basketball-team1', 'basketball-team2', 'basketball-team3', 'football-team1', 'tennis-team1', 'tennis-team2']
使用计数器并在列表中排序。使用递增计数器将每个唯一元素重复n次
repl.it演示:
使用计数器并在列表中排序。使用递增计数器将每个唯一元素重复n次
repl.it演示:
您可以按字母顺序对原始列表进行排序。然后可以迭代并执行更改以附加团队计数。要做到这一点,您需要进行某种形式的查找,以了解可能的运动是什么。您还需要跟踪在浏览已排序的列表时看到每个列表的次数,以便为每次事件添加正确的团队编号。谢谢,是的,因为我按字母顺序对列表进行了排序,我添加了后缀“team”,但我的问题是索引只随运动类型而增加,我不知道怎么做:/你可以对原始列表进行排序,按字母顺序排序。然后可以迭代并执行更改以附加团队计数。要做到这一点,您需要进行某种形式的查找,以了解可能的运动是什么。您还需要跟踪在浏览已排序的列表时看到每个列表的次数,以便为每次事件添加正确的团队编号。谢谢,是的,因为我按字母顺序对列表进行了排序,我添加了后缀“team”,但我的问题是索引只随运动类型而增加,我不知道怎么做:/Thank@Alaniwa我没有注意到这一点。我会编辑(尽管我对2.x中的字符串格式有些生疏)。在2.7中,除了f-strings之外,您基本上拥有python3中的所有选项
str.format
是最简单的替换和最现代的样式选项:'{}-team{}。format(n,index+1)
就可以了。您可以通过使用枚举(g,1)
(或者枚举(g,start=1)
避免手动+1
,如果您喜欢显式命名参数)。谢谢@ShadowRanger。这是一个更好的选择。谢谢@alaniwi没有注意到这一点。我会编辑(尽管我对2.x中的字符串格式有些生疏)。在2.7中,除了f-strings之外,您基本上拥有python3中的所有选项str.format
是最简单的替换和最现代的样式选项:'{}-team{}。format(n,index+1)
就可以了。您可以通过使用枚举(g,1)
(或者枚举(g,start=1)
避免手动+1
,如果您喜欢显式命名参数)。谢谢@ShadowRanger。这是一个更好的选择。稍微调整一下:您希望排序(set(data))
,而不仅仅是set(data)
(问题要求排序)。好的。对集合进行排序。稍微调整:您将希望排序(集合(数据))
,而不仅仅是集合(数据)
(问题要求对其进行排序)。确定。对集合进行排序。