SONG970131 2019-04-12 12:57 采纳率: 88.9%
浏览 816
已采纳

如何用python将两列数字打乱但仍旧相互对应

首先,从txt中读取了500组数字,每组有两个数字(也就是500行两列),然后将这两列数字分开并打乱,但打乱后每一行的数字仍要保持对应关系
例如: 0.1 0.2 这一对数字原来在第1行,打乱之后在第8行,但是分别在两个list中

  • 写回答

3条回答 默认 最新

  • chenxizhan1995 2019-04-13 01:08
    关注

    你好,我也遇到过这样的需求,不知道楼主的要求是不是和我理解的相同。
    整理了一下我当时的思路,代码如下:

    
    """
    File: test.py
    
    将两列数字打乱但仍旧相互对应。
    思路是,在打乱顺序之前,把其中一个列表(比如 l1)的元素位置记录下下来(比如,记到 index
    中),打乱 l1 的顺序就之后(记为 l1_2),用 l1_2 和 index 的信息重排 l2 中的元素,恢复
    二者的对应关系。
    
    列表中的元素可以是数字、字符串。
    
    运行:python3 test.py
    """
    
    def create_index(lst):
        """ 为给定 list 对象生成索引并返回。
        索引的作用是记录 list 对象中每个元素的位置。
        参数:
            lst :一个 list 对象。
        返回:
            dict 对象
        """
        index = {}
        for i,v in enumerate(lst):
            index[v] = i
        return index
    
    def applay_permutation(lst1, index1, lst2):
        """ 根据 lst1 现在的顺序和 lst1 原来的索引,恢复 lst2 和 lst1 中元素的对应关系。
        """
        lst3 = [lst2[index1[v]] for v in lst1]
        return lst3
    
    def main():
        """ 测试
        """
        # 两个具有对应关系的列表
        l1=list("ABC")
        l2=list("abc")
        print("l1:", l1)
        print("l2:", l2)
    
        # 创建索引
        index1=create_index(l1)
    
        # 模拟 l1 顺序被打乱的情况
        l1=list("BCA")
    
        # 恢复 l1 和 l2 元素的对应关系
        l2=applay_permutation(l1, index1, l2)
    
        print("-"*40)
        print("l1:", l1)
        print("l2:", l2)
    
    if __name__ == "__main__":
        main()
    
    

    代码运行截图

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名