小编Fir*_*zen的帖子

Pythonic方式合并两个重叠列表,保留顺序

好的,所以我有两个列表,如下:

  • 他们能够而且将会有重叠的项目,例如[1, 2, 3, 4, 5],[4, 5, 6, 7].
  • 这里将不会是在重叠的其他项目,例如,这将不会发生:[1, 2, 3, 4, 5],[3.5, 4, 5, 6, 7]
  • 列表不一定是有序的也不是唯一的.[9, 1, 1, 8, 7],[8, 6, 7].

我想合并列表,以便保留现有订单,并在最后可能的有效位置合并,以便不丢失任何数据.此外,第一个列表可能很大.我目前的工作代码是这样的:

master = [1,3,9,8,3,4,5]
addition = [3,4,5,7,8]

def merge(master, addition):
    n = 1
    while n < len(master):
        if master[-n:] == addition[:n]:
            return master + addition[n:]
        n += 1
    return master + addition
Run Code Online (Sandbox Code Playgroud)

我想知道的是 - 有更有效的方法吗?它可以工作,但我对此有点怀疑,因为它可以在我的应用程序中遇到大的运行时 - 我正在合并大量的字符串列表.

编辑:我预计[1,3,9,8,3,4,5],[3,4,5,7,8]合并为:[1,3,9,8,3 , 4,5 …

python merge list python-3.x

27
推荐指数
5
解决办法
5383
查看次数

ttk入口背景颜色

我究竟如何从ttk更改Entry小部件的背景颜色?到目前为止我所拥有的是:

        self.estyle = ttk.Style()
        self.estyle.configure("EntryStyle.TEntry", background='black')
        self.estyle.map("EntryStyle.TEntry",
                        foreground=[('disabled', 'yellow'),
                                    ('active', 'blue')],
                        background=[('disabled', 'magenta'),
                                    ('active', 'green')],
                        highlightcolor=[('focus', 'green'),
                                        ('!focus', 'red')])
        self.urlentry_v = StringVar()
        self.urlentry = ttk.Entry(self.input_frame, style="EntryStyle.TEntry",
                                  textvariable=self.urlentry_v)
Run Code Online (Sandbox Code Playgroud)

基本上,我已经改变了我能想到的一切,但是文本输入仍然是顽固的白色.

另外,有没有办法改变边框颜色?

python tkinter ttk

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

我将如何组合两个异步库?

我将如何在同一个程序中组合两个 asyncio 库?

对于上下文,我希望使用Discord api与 aiohttp,它们都是异步事件循环驱动的。我可能也想在混合中添加一个异步 irc 库。

但是,我不明白它们将如何一起操作。我相信理论上我会实现该程序,以便所有类实例都使用相同的 asyncio 事件循环实例,然后将所有运行函数合并为一个,最终调用事件循环。

但是,我想知道是否有更优雅的方法来做到这一点?

python python-asyncio aiohttp

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

Asyncio错误,尝试对非套接字的操作进行操作

我正在研究当前的玩具代码,试图理解asyncio模块.

import asyncio
import os, sys, traceback
from time import time

os.environ['PYTHONASYNCIODEBUG'] = '1'
print(sys.version)

def timed_fib(n):
    def fib(n):
        return fib(n - 1) + fib(n - 2) if n > 1 else n
    a = time()
    return fib(n), time() - a

def process_input():
    text = sys.stdin.readline()
    n = int(text.strip())
    print('fib({}) = {}'.format(n, timed_fib(n)))


@asyncio.coroutine
def print_hello():
    while True:
        print("{} - Hello world!".format(int(time())))
        yield from asyncio.sleep(3)

def main():
    loop = asyncio.get_event_loop()
    loop.add_reader(sys.stdin, process_input)
    loop.run_until_complete(print_hello())


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

然而,尝试运行它会产生下面令人难以置信的神秘回溯.如您所见,调试环境变量在上面代码的第五行中设置,但是,回溯仍然非常无益,如下所示:

3.4.3rc1 …
Run Code Online (Sandbox Code Playgroud)

python windows python-3.x python-asyncio

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

Numpy 添加多个数组

有没有一种方法,以增加在单个操作(而不是总和)多个阵列在一起吗?显然,np.sum并且np.add是不同的操作,但是,我现在正在努力解决的问题是np.add一次只需要两个数组。我可以利用

output = 0
for arr in arr_list:
    output = output + array
Run Code Online (Sandbox Code Playgroud)

或者

output = 0
for arr in arr_list:
    output = np.add(output, array)
Run Code Online (Sandbox Code Playgroud)

是的,这是可行的。但是,如果我可以简单地做一些变体就好了

output = np.add_multiple(arr_list)
Run Code Online (Sandbox Code Playgroud)

这存在吗?

编辑:我最初没有说清楚。我特别要求,它的功能要求一个阵列被构建阵列,如我的数组相等尺寸的不和要求的广播,例如:

a = np.arange(3).reshape(1,3)
b = np.arange(9).reshape(3,3)

a, b = a[:,:,None,None], b[None,None,:,:]
Run Code Online (Sandbox Code Playgroud)

这些工作:

a + b        # Works
np.add(a, b) # Works
Run Code Online (Sandbox Code Playgroud)

这些没有,并以相同的例外失败:

np.sum([a, b], axis = 0)
np.add.reduce([a, b])

Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python numpy array-broadcasting

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