请教一个二维数组查重并且排序的问题

mzccvb 2019-06-26 03:00:48
比如说我有二维数组
[[a, 1],
[a, 2],
[b, 1],
[b, 2],
[b, 3]]

如何先按第一列查重,然后再按第二列排序?得到[[a, 2], [b, 3]]的结果?
...全文
200 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mzccvb 2019-06-26
  • 打赏
  • 举报
回复
引用 7 楼 陈年椰子 的回复:
字典 只能是 一个键名 ,一个键值
你如果你想多个数据 只能这样:

a_dict = {'a':[a,1,211], 'b':[b,222,1111]}
或者

a_dict = {'a':{'value':[1,211]}, 'b':{'value':[,222,1111]}}
原来如此,了解了,感谢感谢!
陈年椰子 2019-06-26
  • 打赏
  • 举报
回复
字典 只能是 一个键名 ,一个键值 你如果你想多个数据 只能这样: a_dict = {'a':[a,1,211], 'b':[b,222,1111]} 或者 a_dict = {'a':{'value':[1,211]}, 'b':{'value':[,222,1111]}}
mzccvb 2019-06-26
  • 打赏
  • 举报
回复
引用 5 楼 陈年椰子 的回复:
不知道你指的是不是这个意思


import pandas as pd
a_list = [['a', 1 , 121], ['a', 2, 122], ['b', 1, 123], ['b', 2, 124], ['b', 3, 125]]

df = pd.DataFrame(a_list)
df.columns = ['ch','val', 'other']
gp=df.groupby(['ch']).apply(lambda t: t[t.val==t.val.max()])
print(gp)
for index, row in gp.iterrows():
print(row[0],row[1],row[2])



用dataframe 处理的话, 后面的数据也在组里的。 你看看我例子,
['a', 1 , 121 。。。。 ] 根据不同需求,调整一下应该可以。
是,dataframe我确实是按照您这个后面的写法来修改的,并且work了,感谢,只是我纯粹是还想了解一下用字典推导式的方法如何写入多元素~~不知您对这个方法熟不熟悉了
陈年椰子 2019-06-26
  • 打赏
  • 举报
回复
不知道你指的是不是这个意思


import pandas as pd
a_list = [['a', 1 , 121],  ['a', 2, 122],  ['b', 1, 123],  ['b', 2, 124],  ['b', 3, 125]]

df = pd.DataFrame(a_list)
df.columns = ['ch','val', 'other']
gp=df.groupby(['ch']).apply(lambda t: t[t.val==t.val.max()])
print(gp)
for index, row in gp.iterrows():
    print(row[0],row[1],row[2])

用dataframe 处理的话, 后面的数据也在组里的。 你看看我例子, ['a', 1 , 121 。。。。 ] 根据不同需求,调整一下应该可以。
mzccvb 2019-06-26
  • 打赏
  • 举报
回复
引用 3 楼 陈年椰子 的回复:
参考一下


import pandas as pd
a_list = [['a', 1], ['a', 2], ['b', 1], ['b', 2], ['b', 3]]
df = pd.DataFrame(a_list)
df.columns = ['ch','val']
gp=df.groupby(['ch']).apply(lambda t: t[t.val==t.val.max()])
for index, row in gp.iterrows():
print(row[0],row[1])

谢谢,您的这个dataframe的方法的确可以,我如果有多列的话在columns中再加元素即可了。顺便还想与您讨论一下用字典推导式的方法来解决这个问题,a = {k: v for k, v in a_list}一下子就能获取这个相同键的最大值了,但是这个无法输入多列元素,比如[a, 1, '123'],[b, 2, '456']等,这个后面的元素只是我的另外所需,无关排序跟查重,这样子的话字典无法读取。请问一下用这种三个以上元素该如何写入字典呢?
陈年椰子 2019-06-26
  • 打赏
  • 举报
回复
参考一下


import pandas as pd
a_list = [['a', 1],  ['a', 2],  ['b', 1],  ['b', 2],  ['b', 3]]
df = pd.DataFrame(a_list)
df.columns = ['ch','val']
gp=df.groupby(['ch']).apply(lambda t: t[t.val==t.val.max()])
for index, row in gp.iterrows():
    print(row[0],row[1])

mzccvb 2019-06-26
  • 打赏
  • 举报
回复
引用 1 楼 陈年椰子 的回复:
意思是分组, 取最大?
是,当然还有一点就是我每个子维度中可能不止两个元素,可能是比如[a, 1, '123']之类的,但是我只需要按第一列查找相同的子列表然后按第二列排序
陈年椰子 2019-06-26
  • 打赏
  • 举报
回复
意思是分组, 取最大?
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

37,739

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧