相关疑难解决方法(0)

通过Python查找和分组字谜

input: ['abc', 'cab', 'cafe', 'face', 'goo']
output: [['abc', 'cab'], ['cafe', 'face'], ['goo']]
Run Code Online (Sandbox Code Playgroud)

问题很简单:它由字谜组成.订单无关紧要.

当然,我可以通过C++(这是我的母语)来做到这一点.但是,我想知道这可以通过Python一行中完成.编辑:如果不可能,可能是2或3行.我是Python的新手.

为了检查两个字符串是否是字谜,我使用了排序.

>>> input = ['abc', 'cab', 'cafe', 'face', 'goo']
>>> input2 = [''.join(sorted(x)) for x in input]
>>> input2
['abc', 'abc', 'acef', 'acef', 'goo']
Run Code Online (Sandbox Code Playgroud)

我认为通过组合等可能是可行的map.但是,我需要使用a dict作为哈希表.我还不知道这是否可以在一行中完成.任何提示都会被贬低!

python list-comprehension anagram

4
推荐指数
1
解决办法
5932
查看次数

关于groupby()的正确用法:Python 3

我没有任何问题想出如何在itertools中应用函数直到我到达 groupby(iterable, key=None),我立即阅读了这个例子并且它没有完全点击我,这导致我在谷歌上研究它.我最终找到了一个例子 ;然而,它并没有真正将它分解为有意义的地方.根据我的理解,groupby()子迭代一个有序的迭代?

我的问题:任何人都可以提供更新的Python 3,解释groupby()"Barney-Style"的功能吗?

python

4
推荐指数
1
解决办法
3459
查看次数

使用列表理解功能在Python中运行长度编码

与许多已经回答过的关于此主题的问题相比,我有一个更基本的“运行长度编码”问题。本质上,我正在尝试获取字符串

string = 'aabccccaaa'
Run Code Online (Sandbox Code Playgroud)

并返回

a2b1c4a3
Run Code Online (Sandbox Code Playgroud)

我以为,如果我能够设法将所有信息放入一个列表,如下所示,我将很容易能够返回a2b1c4a3

test = [['a','a'], ['b'], ['c','c','c','c'], ['a','a','a']]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我想出了以下代码,但是想知道是否有人可以帮助我弄清楚如何使其创建上面显示的输出。

def string_compression():
    for i in xrange(len(string)):
        prev_item, current_item = string[i-1], string[i]
        print prev_item, current_item
        if prev_item == current_item:
            <HELP>
Run Code Online (Sandbox Code Playgroud)

如果有人对解决这样一个问题的更有效方法有任何其他意见,我非常高兴!

python encoding python-2.7

4
推荐指数
1
解决办法
2505
查看次数

Group By大数据集的操作

是否有一个简单的方法/模块在python中进行分组操作,数据集太大而无法放入内存中?

我通常会使用pandas,但它会因大型数据集而崩溃.

python pandas pandas-groupby

4
推荐指数
1
解决办法
819
查看次数

给我最高的元素

我有一个这样的列表:

List1: [1, 5, 9, 1, 5, 9, 15, 21, 29, 1, 5, 9, 15]
Run Code Online (Sandbox Code Playgroud)

我想要一个新的列表,它应该包含最高的数字,然后再用1开始.

List_new: [9, 29, 15]
Run Code Online (Sandbox Code Playgroud)

我试过这个:

List_new = []
for i in range(len(List1)):
    j = List1[i]
    if j + 1 == '1': 
        List_new += [j]
    else:
        continue
print(j)
Run Code Online (Sandbox Code Playgroud)

但我得到了一个空列表.

python list

3
推荐指数
1
解决办法
116
查看次数

比较Python中的两个列表A,B,找到A中与B中相同数字对应的所有元素

我想以这样的方式比较两个Python列表,'A'和'B',我可以找到A中与B中相同数字对应的所有元素.我想为B中的每个数字执行此操作.例如,如果

A = [5, 7, 9, 12, 8, 16, 25]
B = [2, 1, 3, 2, 3, 1, 4]
Run Code Online (Sandbox Code Playgroud)

我想得到

[7,16] corresponding to the number 1 of listB
[5, 12] corresponding to the number 2 of listB
[9, 8] corresponding to the number 3 of listB
[25] corresponding to the number 4 of listB
Run Code Online (Sandbox Code Playgroud)

A和B将始终具有相同的长度.

python list

3
推荐指数
1
解决办法
299
查看次数

在Python中查找具有相同属性的列表中的两个元素

我想在列表中找到具有相同属性的任何元素对.例如,

class X:
    def __init__(self, param):
        self.param = param

my_list = [X(1), X(2), X(3), X(2), X(3), X(3)]
Run Code Online (Sandbox Code Playgroud)

因此,如果比较x.param,我会寻找my_list[1], my_list[3]my_list[2], my_list[4]my_list[2], my_list[5]my_list[4], my_list[5].但是,不能保证列表必须具有相同属性的任何元素,例如

my_list = [X(1), X(2), X(3)]
Run Code Online (Sandbox Code Playgroud)

也可能是此函数的有效参数.

显而易见的方法似乎是:

def find_dupe(my_list, my_lambda):
    attrs = dict()
    for item in my_list:
        if my_lambda(item) in attrs:
             return [attrs[my_lambda(item)], item]
        attrs[my_lambda(item)] = item
    return []
Run Code Online (Sandbox Code Playgroud)

但它似乎有点不优雅,我想知道是否有更好的方法来做到这一点.

python oop attributes dictionary list

3
推荐指数
1
解决办法
87
查看次数

如何对相同布尔值的块进行分组?

假设我有以下列表:

a = [True, True, True, False, False, False, False, True, True]
Run Code Online (Sandbox Code Playgroud)

怎样才能让他们最好只要么返回分组037或分组像下面这样?

[True, True, True]
[False, False, False, False]
[True, True]
Run Code Online (Sandbox Code Playgroud)

背景:我试图在我的 NumPy 数组中找到平台,虽然将导数设置为零是一个好的开始,但我仍然需要将数组排序为块。我认为这基本上归结为上述问题。

我查找了 NumPy 和 itertools(试图从问题NumPy grouping using itertools.groupby performance 中获得解决方案)但我没有成功。我想人们可能会使用itertools.takewhile和 filtfalse的组合(请参阅此处的文档),但我对此并不了解。或者也许我只是想得太复杂了。

python numpy python-itertools

3
推荐指数
1
解决办法
687
查看次数

为什么一个 itertools.groupby 分组只能迭代一次?

我最近不得不调试一些类似这样的代码:

for key, group in itertools.groupby(csvGrid, lambda x: x[0]):
    value1 = sum(row[1] for row in group)
    value2 = sum(row[2] for row in group)
    results.append([key, value1, value2])
Run Code Online (Sandbox Code Playgroud)

在每个结果集中,value2作为0. 当我查看它时,我发现代码第一次迭代时group,它消耗了它,因此第二次迭代时有零个元素。

直觉上,我希望group是一个可以无限次迭代的列表,但它的行为就像一个只能迭代一次的迭代器。这种情况有什么好的理由吗?

python python-itertools

2
推荐指数
1
解决办法
1153
查看次数

从python列表中获取值序列

我有这样的数组,

a = [3,2,5,7,4,5,6,3,8,4,5,7,8,9,5,7,8,4,9,7,6]
Run Code Online (Sandbox Code Playgroud)

我想制作小于7的值列表(如下所示)

b = [[3,2,5],[4,5,6,3],[4,5],[5],[4],[6]]
Run Code Online (Sandbox Code Playgroud)

所以我使用了以下方法,

>>> from itertools import takewhile
>>> a = [3,2,5,7,4,5,6,3,8,4,5,7,8,9,5,7,8,4,9,7,6]
>>>list(takewhile(lambda x: x < 7 , a))
[3, 2, 5]
Run Code Online (Sandbox Code Playgroud)

但我只得到第一个序列.任何人都可以帮我解决这个问题吗?谢谢.

python list python-itertools

1
推荐指数
1
解决办法
160
查看次数