相关疑难解决方法(0)

如何在保留订单的同时从列表中删除重复项?

是否有内置功能可以从Python中的列表中删除重复项,同时保留顺序?我知道我可以使用一个集来删除重复项,但这会破坏原始顺序.我也知道我可以像这样滚动自己:

def uniq(input):
  output = []
  for x in input:
    if x not in output:
      output.append(x)
  return output
Run Code Online (Sandbox Code Playgroud)

(感谢您放松代码示例.)

但是如果可能的话,我想利用内置或更多的Pythonic习语.

相关问题:在Python中,从列表中删除重复项的最快算法是什么,以便所有元素在保留顺序的同时是唯一的?

python list unique duplicates

722
推荐指数
12
解决办法
52万
查看次数

ValueError:具有多个元素的数组的真值是不明确的.使用a.any()或a.all()

我刚刚在代码中发现了一个逻辑错误,导致了各种各样的问题.我无意中做了一个按位AND而不是逻辑AND.

我更改了代码:

r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) & (r["dt"] <= enddate))
selected = r[mask]
Run Code Online (Sandbox Code Playgroud)

至:

r = mlab.csv2rec(datafile, delimiter=',', names=COL_HEADERS)
mask = ((r["dt"] >= startdate) and (r["dt"] <= enddate))
selected = r[mask]
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我收到了相当神秘的错误消息:

ValueError:具有多个元素的数组的真值是不明确的.使用a.any()或a.all()

为什么在使用按位操作时没有发出类似的错误 - 我该如何解决这个问题?

python numpy

190
推荐指数
4
解决办法
51万
查看次数

"如果a或b或c但不是全部"的Python语法

我有一个python脚本,可以接收零或三个命令行参数.(它可以在默认行为上运行,也可以需要指定所有三个值.)

什么是理想的语法:

if a and (not b or not c) or b and (not a or not c) or c and (not b or not a):
Run Code Online (Sandbox Code Playgroud)

python if-statement

128
推荐指数
10
解决办法
19万
查看次数

如何在Python中切换值

0和之间切换的最有效方法是什么1

python python-3.x

118
推荐指数
10
解决办法
7万
查看次数

在python函数中使用True,False和None作为返回值

我认为我完全理解这一点,但我只是想确保,因为我总是看到别人说绝对不要测试反对True,FalseNone.他们建议例程应该引发错误而不是返回False或None.无论如何,我有很多情况我只想知道是否设置了一个标志,所以我的函数返回True或False.如果没有有用的结果,还有其他情况我有一个函数返回None.从我的想法来看,只要我意识到我永远不应该使用,就不会有问题:

if foo == True
if foo == False
if foo == None
Run Code Online (Sandbox Code Playgroud)

而应该使用:

if foo is True
if foo is False
if foo is None
Run Code Online (Sandbox Code Playgroud)

因为True,False和None都是单例,并且总是会在使用"is"而不是"=="时评估我的预期方式.我错了吗?

沿着相同的路线,修改有时返回None的函数会更加pythonic,以便它们引发错误吗?假设我有一个名为"get_attr()"的实例方法,它从某个文件中检索属性.如果它发现我请求的属性不存在则返回None是否合适?让他们提出错误并在以后捕获它会更好吗?

python

39
推荐指数
4
解决办法
10万
查看次数

检查是否只设置了变量列表中的一个变量

我正在寻找一种简单的方法来检查变量列表中是否只有一个变量具有True值.我已经看过这个逻辑xor帖子,并试图找到一种方法来适应多个变量,只有一个是真的.

>>>TrueXor(1,0,0)
True

>>>TrueXor(0,0,1)
True

>>>TrueXor(1,1,0)
False

>>>TrueXor(0,0,0,0,0)
False
Run Code Online (Sandbox Code Playgroud)

python xor

14
推荐指数
3
解决办法
5495
查看次数

相互排斥的关键字args的优雅模式?

有时在我的代码中,我有一个函数可以用两种方式之一进行参数.就像是:

def func(objname=None, objtype=None):
    if objname is not None and objtype is not None:
        raise ValueError("only 1 of the ways at a time")
    if objname is not None:
        obj = getObjByName(objname)
    elif objtype is not None:
        obj = getObjByType(objtype)
    else:
        raise ValueError("not given any of the ways")

    doStuffWithObj(obj)
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?如果arg可以采用三种方式之一怎么办?如果类型不同我可以做:

def func(objnameOrType):
    if type(objnameOrType) is str:
        getObjByName(objnameOrType)
    elif type(objnameOrType) is type:
        getObjByType(objnameOrType)
    else:
        raise ValueError("unk arg type: %s" % type(objnameOrType))
Run Code Online (Sandbox Code Playgroud)

但如果他们不是呢?这种选择似乎很愚蠢:

def func(objnameOrType, isName=True):
    if isName:
        getObjByName(objnameOrType)
    else:
        getObjByType(objnameOrType)
Run Code Online (Sandbox Code Playgroud)

因此,你必须称之为func(mytype, …

python design-patterns coding-style

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

如何使用互斥参数创建 Python 函数?

我有一个 Python 类,它需要接受两个互斥参数之一。如果参数不是排他性的(即:如果两者都给出或都不给出),则应引发错误。

class OrgLocation:
    __init__(self, location_num=None, location_path=None):
        """location_num & location_path are mutually exclusive"""
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,最好的选择是创建两个单独的类。但是,我正在使用一个外部 API,它要求这两个属性相互排斥。

要求:

<OrgLocation LocationPathName="ROOT/BU/DIV/SL/DEPT/JOB" LocationNum="1234"/>
Run Code Online (Sandbox Code Playgroud)

回复:

<Error Message="Use either LocationNum or LocationPathName but not both." ErrorCode="1186">
Run Code Online (Sandbox Code Playgroud)

类似的问题似乎表明argparse可用于命令行界面中的互斥参数,但我不确定如何将其应用于类构造函数

如何创建具有互斥参数的 Python 函数?

python arguments mutual-exclusion

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

如何检查图中是否存在colorbar

问题:有没有办法检查颜色条是否已经存在?

我正在制作许多带有循环的情节.问题是每次迭代都会绘制颜色条!

在此输入图像描述

如果我可以确定颜色条是否存在,那么我可以将颜色条功能放在if语句中.

if cb_exists:
    # do nothing
else:
    plt.colorbar() #draw the colorbar
Run Code Online (Sandbox Code Playgroud)

如果我使用多处理来制作数字,是否可以防止添加多个颜色条?

import numpy as np
import matplotlib.pyplot as plt
import multiprocessing

def plot(number):
    a = np.random.random([5,5])*number
    plt.pcolormesh(a)
    plt.colorbar()
    plt.savefig('this_'+str(number))

# I want to make a 50 plots
some_list = range(0,50)
num_proc = 5
p = multiprocessing.Pool(num_proc)
temps = p.map(plot, some_list)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我知道在绘制下一次迭代之前我可以用plt.clf()和plt.cla()清除这个图.但是,我在我的底图图层上有数据我不想重新绘制(这会增加创建绘图所需的时间).所以,如果我可以删除颜色条并添加一个新颜色,我会节省一些时间.

python matplotlib colorbar

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

Python条件一个或另一个但不是两个

我试图在python中编译一个if语句,它检查两个变量,看它们是否<= .05.现在如果两个变量都是True,我只想让代码传递/继续,但如果只有一个变量为True,那么我希望代码能够做一些事情.例如:

ht1 = 0.04
ht2 = 0.03

if (ht1 <= 0.05) or (ht2 <= 0.05):
    # do something
else:
    pass
Run Code Online (Sandbox Code Playgroud)

我不认为这个例子会按照我想要的方式工作,因为我对OR的理解是1条件返回True或两个条件都返回True.如果有人可以帮助我指出正确的方向,那么它将非常适合.

python conditional if-statement

5
推荐指数
2
解决办法
7321
查看次数

Python中只有一个True对象和一个False对象吗?

我知道Python的保证,有只有一个实例NoneType,该None对象,这样就可以安全地使用is None测试某等于None.

是否有同等保障bool TrueFalse(即只有一个每个实例)?

如果没有,为什么不呢?

编辑:我特别注意到,(n+0) is (0+n)给出True了n个range(-5, 257)False其他.换句话说,零,前256个正整数和前5个负整数似乎是预先缓存的,并且不会再次实例化.我猜这是解释器的选择(在我的例子中是CPython)而不是语言的规范.并且bool源自int,所以我仍然不得不怀疑我可以与其他口译员有什么期望.

编辑:澄清,因为这似乎产生了很多混乱,我的意图是测试值的布尔解释.为此我永远不会使用is Trueis False.我的目的是能够区分False其他一切,在一个变量中可以有几种类型的值,包括空字符串,零和None,以及类似的True.我本身就是一位经验丰富的程序员,当我看到"如果booleanvar == True"时,他就是那种畏缩的人.

关于复制品的说明:据称这个问题是()的副本不回答这个问题; 他们只是声明这bool是一个int主要在他们的不同的子类,而repr不是如果True并且False保证是唯一的.

另外,请注意,这不是关于名称 TrueFalse绑定的问题,而是关于类的实例的问题bool …

python boolean object instance

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

Python检查是否只有一个对象不是None

我有两个python对象ab.

什么是最好/最有效/最pythonic的方法来检查这些对象中究竟有一个是None什么?

python

0
推荐指数
2
解决办法
133
查看次数

两者都没有或两者都是其他东西

我需要一个类的两个属性要么都是None或都是int. 已经进行了检查,以确保如果它们都设置为 None 以外的值,则它们将是整数。因此,在该方法的末尾,__init__我调用一个小函数来检查它们的类型是否以任一顺序不同:

def both_none_or_both_something_else(a,b): 
    if a is None and b is not None:
        return False
    if b is None and a is not None:
        return False
    return True

>> both_none_or_both_something_else(5,None)  # False

>> both_none_or_both_something_else(None,3)  # False

>> both_none_or_both_something_else(5,20)  # True

>> both_none_or_both_something_else(None, None)  # True
Run Code Online (Sandbox Code Playgroud)

对两个变量的检查可以压缩成一行吗?

python python-3.x

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