Python:从列表中删除具有相同楼层功能的数字

时间:2017-03-27 01:49:35

标签: python list floor

我有这个清单

x = [1.1, 1.2, 1.2, 2.1, 2.2, 3.0, 4.5]

我想删除具有相同楼层功能的数字,并将每个整数的第一个数字取为:

x = [1.1, 2.1, 3.0, 4.5] 

我试过

x = [1.1, 1.2, 1.2, 2.1, 2.2, 3.0, 4.5]
def h(l): 
    y = []
    for i in l: 
        if int(i) != int(i+1):
            z = i 
            y.append(z) 
    return(y)
print(h(x))

但是当我打印它时会产生与列表相同的结果

3 个答案:

答案 0 :(得分:3)

如果itertools.groupby未排序,则可以使用x

out = [next(g) for k, g in itertools.groupby(x, floor)]
out
# [1.1, 2.1, 3.0, 4.5]

答案 1 :(得分:0)

min函数的一个小键映射和设置为列表转换的工作原理:

public function roleplay()
{
    return $this->hasOne('App\Database\Frontend\User\Roleplay', 'user_id', 'id');
}

答案 2 :(得分:0)

比使用itertools.groupby更通用的解决方案既不假设您的输入数据已排序也不假设您希望对输出进行排序如下:

def first_floor(numbers):
    seen = set()
    for x in numbers:
        f = floor(x)
        if f not in seen:
            seen.add(f)
            yield x

然后:

>>> x = [1.1, 1.2, 1.2, 2.1, 2.2, 3.0, 4.5]
>>> list(first_floor(x))
[1.1, 2.1, 3.0, 4.5]

对于排序数据,这几乎一样快。对于未排序的数据,它比排序和使用groupby

快得多
>>> x = [random.random()*10 for i in range(100)]
>>> %timeit [next(g) for k, g in itertools.groupby(sorted(x), floor)]
1000000 loops, best of 3: 19 µs per loop
>>> %timeit list(first_floor2(x))
1000000 loops, best of 3: 12.6 µs per loop