相关疑难解决方法(0)

如何在Python中指定文字生成器类型?

我需要检查某个变量是否是生成器对象.我如何指定文字生成器类型来代替??? 下面?

def go():
    for i in range(999):
    yield i
la = go()
print repr(type(la))

<type 'generator'>

assert type(la) == ???
Run Code Online (Sandbox Code Playgroud)

python assert generator literals

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

Python:如何定义获取字符串列表或字符串的函数

假设我想在数据库中添加字符串列表或只添加一个字符串:

names = ['Alice', 'Bob', 'Zoe']
Run Code Online (Sandbox Code Playgroud)

我希望这add_to_db会接受这两种情况

add_to_db(names)
add_to_db('John')
Run Code Online (Sandbox Code Playgroud)

这是正确的方法:

def add_to_db(name_or_names):
    if (...):
        ... # add a single name
    else:
        for name in name_or_names:
            ... # add a single name
    commit_to_db()
Run Code Online (Sandbox Code Playgroud)

我应该在第一个中加入什么...,作为一个字符串列表或只是一个字符串的条件(不要忘记该字符串也是可迭代的)?

python

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

如何检查python中的iterable实例?

考虑这个例子?

p = [1,2,3,4], (1,2,3), set([1,2,3])]
Run Code Online (Sandbox Code Playgroud)

而不是检查每种类型

for x in p:
   if isinstance(x, list):
      xxxxx
   elif isinstance(x, tuple):
      xxxxxx
   elif isinstance(x, set):
      xxxxxxx
Run Code Online (Sandbox Code Playgroud)

以下是否有一些等价物:

for element in something:
  if isinstance(x, iterable):
      do something
Run Code Online (Sandbox Code Playgroud)

python iterable isinstance

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

如何检查对象是否是str-python类型的列表

说我有以下对象.

    d = ["foo1", "foo2", "foo3", "foo4"]

    c = 1

    a = ["foo1", 6]
Run Code Online (Sandbox Code Playgroud)

我想检查对象是否是某种类型的列表.如果我想检查d是否是列表而该列表包含字符串,我该怎么做?

d应该通过,但c和a应该通过检查.

python types list

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

找出是否可以使用`in`运算符

什么是最简单(也是最优雅)的方法,以确定in运算符是否可以在python中使用?如果我打开一个python shell并输入:

"" in 2
Run Code Online (Sandbox Code Playgroud)

它打印:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'int' is not iterable
Run Code Online (Sandbox Code Playgroud)

根据python-docs,一个iterable是:

容器.iter()

返回一个迭代器对象.该对象需要支持下面描述的迭代器协议.如果容器支持不同类型的迭代,则可以提供其他方法来专门请求这些迭代类型的迭代器.(支持多种迭代形式的对象的示例是支持广度优先和深度优先遍历的树结构.)此方法对应于Python/C API中Python对象的类型结构的tp_iter槽.

所以

hasattr([], "__iter__") and hasattr({}, "__iter__")
Run Code Online (Sandbox Code Playgroud)

true按预期返回,但是

hasattr("test_string", "__iter__")
Run Code Online (Sandbox Code Playgroud)

返回false.但我可以使用

"test" in "test_string"
Run Code Online (Sandbox Code Playgroud)

没有任何问题.

优雅我指的是不使用try-except解决方案

python containers iterator

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

为什么循环变量没有在python中更新

这段代码只打印1 2 4 5 ..我的问题是为什么p在第3次迭代时没有用新数组更新

p = [1, 2, [1, 2, 3], 4, 5]
for each in p:
  if type(each) == int:
    print each
  else:
    p = each
Run Code Online (Sandbox Code Playgroud)

实际上,在调试代码时要确切地说,我看到它实际上更新了p的值但是each变量不会再次重新初始化.

python

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

检查类是否可迭代

我有一个fib下面给出的课程.它实现__iter____next__.它是一个可迭代的,也是它自己的迭代器.

class fib(object):
    def __init__(self):
        self.prev = 0
        self.curr = 1

    def __iter__(self):
        return self

    def __next__(self):
        value = self.curr
        self.curr += self.prev
        self.prev = value
        return value


from collections import Iterable

print(isinstance(fib, Iterable))
Run Code Online (Sandbox Code Playgroud)

print语句返回False,我希望它返回True

python iterable class python-3.x

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

有条不紊地进入for循环

如果参数是一个序列(列表,元组)或跳过循环但只执行一次操作,那么避免代码重复循环的方法是什么?

def foo(arg1,sequence=None):
    # If possible, loop, else do it once
        if isinstance(sequence,(list,tuple)):
            for value in sequence:
                do_something(arg1)
        else:
            do_something(arg1)
Run Code Online (Sandbox Code Playgroud)

我在for循环中所做的操作比这更长,我想知道你通常使用什么方法来避免这种情况,如果你避免它的话.我经常遇到这个问题而且我没有提出要解决它的问题.

编辑:问题不是在Python中的重复,我如何确定对象是否可迭代?,如建议的那样.我不想引入不同的条件.我想避免重复.

python for-loop

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

仅当定义了 __iter__ 时才会调用 __getitem__

我正在对一个字典进行子类化,并且希望获得一些帮助来理解下面的行为(请)[Python 版本:3.11.3]:

class Xdict(dict):
    def __init__(self, d):
        super().__init__(d)
        self._x = {k: f"x{v}" for k, v in d.items()}

    def __getitem__(self, key):
        print("in __getitem__")
        return self._x[key]

    def __str__(self):
        return str(self._x)

    def __iter__(self):
        print("in __iter__")

d = Xdict({"a": 1, "b": 2})
print(d)
print(dict(d))
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

{'a': 'x1', 'b': 'x2'}
in __getitem__
in __getitem__
{'a': 'x1', 'b': 'x2'}
Run Code Online (Sandbox Code Playgroud)

如果我注释掉该__iter__方法,输出会像这样改变:

{'a': 'x1', 'b': 'x2'}
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

显然该__iter__方法没有被调用,但它的存在正在影响行为。

我只是对为什么会发生这种情况感兴趣。我并不是在寻找替代解决方案来防止它。

谢谢,保罗。

python dictionary subclass

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

Python:计算列表列表中的整体元素

我想写一个函数,它接受一个数字和列表列表,它们也可以包含数字和列表,依此类推......,并返回列表中某处的总数量.

示例:[1,[[[0,2],7,3],5,[1,2]],3]其中包含9个数字.

到目前为止这是我的代码:

test=[1,[[[0,2],7,3],5,[1,2]],3]
def flatten(mylist):
    counter = 0
    for i in range(len(mylist)):
        if type(mylist[i]) == int:
            counter += 1
        if type(mylist[i]) == list:
            [item for sublist in mylist[i] for item in sublist]
            counter += 1
    return counter
Run Code Online (Sandbox Code Playgroud)

我想我需要recursivley压扁子列表.但我得到错误:TypeError: 'int' object is not iterable

python

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

查找和替换多维列表中的元素(python)

类似于这个问题:查找和替换列表(python)中的元素, 但使用多维数组。例如,我想用 0 替换所有 N:

list =
[['N', 0.21],
 [-1, 6.6],
 ['N', 34.68]]
Run Code Online (Sandbox Code Playgroud)

我想把它改成:

list =
[[0, 0.21],
 [-1, 6.6],
 [0, 34.68]]
Run Code Online (Sandbox Code Playgroud)

python replace list find multidimensional-array

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