Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-按字母顺序/类型/索引对列表排序_Python_Python 2.7 - Fatal编程技术网

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)
(问题要求排序)。好的。对集合进行排序。稍微调整:您将希望
排序(集合(数据))
,而不仅仅是
集合(数据)
(问题要求对其进行排序)。确定。对集合进行排序。