Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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 - Fatal编程技术网

如何在Python中洗牌(而不是随机)列表?

如何在Python中洗牌(而不是随机)列表?,python,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

我分析从文件夹中的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]
,但我还没有找到如何使用它。

Listcomp with
list.index

>>> 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]

一种方法,与您的方法相似,但重复性较小:

顺序=['a'、'b'、'd'、'f'、'e'、'c'] >>>[resu[l.索引(键)]用于顺序键] [150, 43, 49, 27, 53, 35] 您可以对
l
执行相同的操作,但您只需返回
order
,因此您最好直接使用
order


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

d=dict(zip(左,右)) >>>d {'a':150,'b':43,'c':35,'d':49,'e':53,'f':27} >>>[d[键]用于顺序键] [150, 43, 49, 27, 53, 35]
对任意数量的列表重新排序的通用函数:

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)

可以将迭代器与映射一起使用

order = [0,1,3,5,4,2]
resu = map(l.__getitem__, order)
大多数接受列表的简单事物都会接受迭代器作为输入, 如果您特别需要列表,您可以像这样在地图上添加
list()

resu = list(map(l.__getitem__, order))

这是一个列表理解,而不是生成器。但是代码是有效的:)总是混合listcomp和genexp,看起来几乎和我一样,但事实并非如此。。。生成器:)我决不会误解它,listcomp的
[*(genexp)]
不是一样吗?在这种情况下,我倾向于将ListCOMP视为语法糖-似乎这也违背了模糊性,拒绝猜测的诱惑,但我真的不知道为什么ListCOMP被设计为分离关键字。答案是历史性的:首先添加列表理解(Python 2),然后生成表达式(Python 2.4)。.非常感谢。我喜欢用辞典,这是一个很好的方法。