如何在Python中随机播放列表(不是随机的)?

时间:2020-09-28 14:53:48

标签: python

我分析从文件夹中的csv文件检索的信息。 我按字母顺序阅读这些文件,并根据阅读内容建立两个列表:

l,这是检索文件名(不带扩展名)的列表。

resu,这是包含我对这些文件感兴趣的信息的列表。

l = ['a','b','c','d','e','f']
resu = [150,43,35,49,53,27]

我从这些信息中绘制plt.bar,并希望以某种顺序绘制它们,以便能够更好地解释它们。

我想按以下顺序放置文件:'a','b','d','f','e','c'

我写过:

(l[2],l[3],l[4],l[5])=(l[3],l[5],l[4],l[2])
(resu[2],resu[3],resu[4],resu[5])=(resu[3],resu[5],resu[4],resu[2])

有没有一种方法可以更轻松,更快速地做到这一点? 我曾考虑过使用新项目索引列表:[0,1,3,5,4,2],但还没有找到如何使用它的方法。

4 个答案:

答案 0 :(得分:1)

一种方法,与您的方法类似,但重复性较低:

>>> order = ['a','b','d','f','e','c']
>>> [resu[l.index(key)] for key in order]
[150, 43, 49, 27, 53, 35]

您可以为l做同样的事情,但是您只会得到order,因此不妨直接使用order


一种更好的方法是先将数据转换为字典:

>>> d = dict(zip(l, resu))
>>> d
{'a': 150, 'b': 43, 'c': 35, 'd': 49, 'e': 53, 'f': 27}
>>> [d[key] for key in order]
[150, 43, 49, 27, 53, 35]

答案 1 :(得分:0)

带有list.index的Listcomp?

>>> l = ['a','b','c','d','e','f']
>>> change = ['a','b','d','f','e','c']
>>> resu = [150,43,35,49,53,27]

>>> [resu[l.index(idx)] for idx in change]

[150, 43, 49, 27, 53, 35]

答案 2 :(得分:0)

用于对任意数量的列表重新排序的通用函数:

def reorder(order, *lists):
    result = []
    for l in lists:
        result.append([])
        for i in order:
            result[-1].append(l[i])
    return result

用法:

l, resu = reorder([0,1,3,5,4,2], l, resu)

答案 3 :(得分:0)

您可以将迭代器与map一起使用

list()

接受列表的最简单的事物将接受迭代器作为输入, 如果您特别需要列表,可以像这样在地图上添加resu = list(map(l.__getitem__, order))

var welcomeText = document.getElementById("demo").innerHTML = 'Welcome, ' + name;