相关疑难解决方法(0)

原始列表在 python 中被修改

我有一个简单的代码如下:

def swap(node):
    m00         = node[0][0]
    node[0][0]  = node[1][0]
    node[0][1]  = m00

originalList = [[1,2,3], [4,5,6], [7,8,9]]

# temp = list(originalList)
temp = originalList[:]

swap(temp)

print originalList
Run Code Online (Sandbox Code Playgroud)

最初,我使用上面显示的值定义一个列表,然后将此列表复制到临时列表。两种复制方法我都试过了。然后我使用列表执行交换功能temp并再次打印原始列表。结果,原来的列表发生了变化。这种行为背后的原因是什么?

python

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

删除列表中第一项的函数(Python)

我正在尝试编写一个删除Python列表中第一项的函数.这就是我尝试过的.当我调用函数时为什么不删除remove_first_wrong?当我在main函数中执行它时,为什么列表切片方法会起作用?

def remove_first_wrong(lst):
    lst = lst[1:]

def remove_first_right(lst):
    lst.pop(0)

if __name__ == '__main__':
    l = [1, 2, 3, 4, 5]
    remove_first_wrong(l)
    print(l)

    l_2 = [1, 2, 3, 4, 5]
    remove_first_right(l_2)
    print(l_2)

    # Why does this work and remove_first_wrong doesn't?
    l_3 = [1, 2, 3, 4, 5]
    l_3 = l_3[1:]
    print(l_3)
Run Code Online (Sandbox Code Playgroud)

python

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

在测试运行开始时动态选择 pytest 测试

我正在使用 pytest 为我的 Python 应用程序编写单元测试。我编写单元测试的大部分经验来自 Javacript 框架,例如 Jasmine,您可以在其中使用单词“fit”单独标记要在下一轮测试中运行的测试,或者使用单词“xit”标记要排除的测试。在开发过程中,当我只想运行非常特定的测试子集以减少运行时间和结果输出混乱时,“fit”非常好。Xit 已经使用 mark.skip 装饰器实现,但我想要合适。

我如何配置 pytest 来执行如下操作:

  • 收集所有测试
  • 检查是否有任何带有装饰器 @pytest.mark.only 装饰器标记的测试。如果找到任何测试,则仅运行这些测试,否则运行所有测试

我知道我可以选择使用带有 -m 标志的命令行运行的测试,但我想动态检测可运行测试的子集,以便在开发过程中我不必使用一个命令使用两个不同的命令运行测试有 -m 标志,其他没有该标志。

我想 conftest.py 可能是添加此逻辑的地方,但我找不到有关其配置的太多信息。

python unit-testing pytest

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

python如何附加到列表工作?

我在python中遇到了一个附加到列表的问题.我实施的代码是:

a=[1,2]
b=[3,4]
a.append(b)
b.append(5)
print a
print b
Run Code Online (Sandbox Code Playgroud)

我对python append的理解是这段代码的预期输出是:

预期产出

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

但实际输出是不同的.实际产出

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

我只想知道为什么会这样.

由于我附加了列表ba,追加前5b,名单a应该有[1,2,[3,4]]

python list append

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

python中的列表,带引用

如何复制列表的内容而不仅仅是Python中列表的引用?

python copy reference list

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

制作一份清单副本

我正试图制作一个"目标",一个"网格"的副本.我不明白为什么这段代码不起作用.

grid = [[randint(0, 1), randint(0, 1), randint(0, 1)],
        [randint(0, 1), randint(0, 1), randint(0, 1)],
        [randint(0, 1), randint(0, 1), randint(0, 1)]]

target = [[0, 0, 0]] * 3
for x in range(3):
    for y in range(3):
        target[x][y] = grid[x][y]

print target
print grid
Run Code Online (Sandbox Code Playgroud)

这是一个结果:

[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
[[1, 0, 0], [0, 1, 1], [0, 1, 0]]
Run Code Online (Sandbox Code Playgroud)

python

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

Numpy数组值在没有被改变的情况下发生了变化?

我有两个向量,posVecdirVec谁的价值我想保持(0.0,0.0,0.0).

所以我成立了临时的载体t_pos&t_dir并改变它们的值取决于值cylCut

然后在循环的下一次迭代中,我重置临时向量.

代码:

import numpy as np

posVec = np.array([0.0,0.0,0.0]) # orginal vectors
dirVec = np.array([0.0,0.0,0.0])
print "................."
print 'Before'
print "................."
print posVec
print dirVec
print "................."

for cylCut in range(0,3):
    t_pos = posVec      # temporary vectors
    t_dir = dirVec
    if cylCut == 0:     # set temp vects accordingly
        print '0'
        t_pos[0] = 1.0
        t_dir[0] = 1.0
    if cylCut == 1:
        print '1'
        t_pos[1] = 1.0
        t_dir[1] = 1.0 …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

创建列表的多个副本的最快方法

问题

我正在为我的迷宫求解器开发一个广度优先的搜索算法,到目前为止它正在运行.我通过复制前一个堆栈并将当前值附加到它来跟踪当前堆栈.

由于复制列表需要花费大量时间,因此我希望在一次操作中创建列表的多个副本.

到目前为止我尝试过的

  • 复制列表并将其分配给多个变量.

    l = [1, 2, 3]
    a = b = c = l[:]  # Just creates references and no individual lists
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用具有copy函数的numpy数组(快于list[:]).

创建一个列表的多个副本的最快方法是什么?

python numpy

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

How to copy some elements from a list-of-list so that is doesn't affect the value of elements in the copied list

What I want to do is to copy some elements of one list-of-list to other based on certain conditions and then change the original list of lists

arr = [[1,0,4],[1,2,65],[2,3,56],[11,14,34]]
brr = []

for x in range(0,len(arr)):
    if arr[x][1] < 10:
        brr.append(arr[x])
        arr[x][1] = 1000
print(brr)
Run Code Online (Sandbox Code Playgroud)

O/P:

[[1, 1000, 4], [1, 1000, 65], [2, 1000, 56]]

in the above example, I wanted to copy all the list with the middle element <10 to another list-of-list brr and then change the …

python

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

为什么 Python 中变量赋值的行为不同?

我是Python新手,我对以下代码感到很困惑:

示例1:

n = 1
m = n
n = 2
print(n)   # 2
print(m)   # 1
Run Code Online (Sandbox Code Playgroud)

示例2:

names = ["a", "b", "c"]
visitor = names
names.pop()
print(names)      # ['a', 'b']
print(visitor)    # ['a', 'b']
Run Code Online (Sandbox Code Playgroud)

示例 1 显示n是 1 并且m是 1。然而,示例 2 显示names是 ['a', 'b'],并且visitor也是 ['a', 'b']。

对我来说,示例 1 和示例 2 很相似,所以我想知道为什么结果如此不同?谢谢。

python variables

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

标签 统计

python ×10

list ×2

numpy ×2

append ×1

arrays ×1

copy ×1

pytest ×1

reference ×1

unit-testing ×1

variables ×1