首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一维列表索引python:增强MaskableList

一维列表索引python:增强MaskableList
EN

Stack Overflow用户
提问于 2013-02-03 01:12:51
回答 1查看 619关注 0票数 3

我的一个常见问题是:

作为我的输入(n是一些整型>1)

代码语言:javascript
复制
W = numpy.array(...)
L = list(...)

哪里

代码语言:javascript
复制
len(W) == n
>> true
shape(L)[0] == n
>> true

我想对关于W和一个比较器的值的列表L进行排序。我的想法是做以下事情:

代码语言:javascript
复制
def my_zip_sort(W,L):
    srt = argsort(W)
    return zip(L[srt],W[srt])

这应该是这样工作的:

代码语言:javascript
复制
a = ['a', 'b', 'c', 'd']
b = zeros(4)
b[0]=3;b[1]=2;b[2]=[1];b[3]=4
my_zip_sort(a,b)
>> [(c,1)(b,2)(a,3)(d,4)]

但这不是,因为

代码语言:javascript
复制
TypeError: only integer arrays with one element can be converted to an index

因此,我需要执行另一个循环:

代码语言:javascript
复制
def my_zip_sort(W,L):
    srt = argsort(W)
    res = list()
    for i in L:
        res.append((L[srt[i]],W[srt[i]]))
    return res

我找到了一个关于MaskableListthread,但这对我不起作用(您可以在评论中看到),因为我不仅需要保留或丢弃列表中的特定值,还需要对它们进行重新排序:

代码语言:javascript
复制
a.__class__
>> msk.MaskableList
srt = argsort(b)
a[srt]
>> ['a', 'b', 'd']

结论:

我想找到一种方法来根据array中的约束对对象的list进行排序。我自己找到了一种方法,除了列表索引之外,这种方法还不错。你能帮我写一个类似于MaskableList的类来完成这个任务吗?它的性能很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-03 04:36:09

你不需要扩展list,但要避免for-loop。如果您需要一个新的tuples list,那么一个list-comprehension就足够了,而且可能是您在这里所能做的最好的工作

代码语言:javascript
复制
def my_zip_sort(W, L):
    srt = argsort(W)
    return [(L[i], W[i]) for i in srt]

示例:

代码语言:javascript
复制
n = 5
W = np.random.randint(10,size=5)
L = [chr(ord('A') + i) for i in W]

L # => ['A', 'C', 'H', 'G', 'C']

srt = np.argsort(W)
result = [(L[i], W[i]) for i in srt]


print result
[('A', 0), ('C', 2), ('C', 2), ('G', 6), ('H', 7)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14664333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档