小编Sur*_*ari的帖子

条件生成器表达式的意外行为

我正在运行一段代码,意外地在程序的某个部分出现了逻辑错误.在调查该部分时,我创建了一个测试文件来测试正在运行的语句集,并发现一个看起来非常奇怪的异常错误.

我测试了这个简单的代码:

array = [1, 2, 2, 4, 5] # Original array
f = (x for x in array if array.count(x) == 2) # Filters original
array = [5, 6, 1, 2, 9] # Updates original to something else

print(list(f)) # Outputs filtered
Run Code Online (Sandbox Code Playgroud)

输出是:

>>> []
Run Code Online (Sandbox Code Playgroud)

是的,没什么.我期待过滤器理解能够在数组中获取数量为2的项并输出它,但我没有得到:

# Expected output
>>> [2, 2]
Run Code Online (Sandbox Code Playgroud)

当我评论第三行再次测试时:

array = [1, 2, 2, 4, 5] # Original array
f = (x for x in array if array.count(x) == 2) # Filters original
### array …
Run Code Online (Sandbox Code Playgroud)

python generator generator-expression variable-assignment

57
推荐指数
5
解决办法
2594
查看次数

字典无限循环意外退出

我正在尝试在Python中创建无限循环的各种方法(除了通常之外while True),并提出了这个想法:

x = {0: None}

for i in x:
    del x[i]
    x[i+1] = None  # Value doesn't matter, so I set it to None
    print(i)
Run Code Online (Sandbox Code Playgroud)

在纸面上,我找到了无限循环的方式:

  1. 我遍历字典中的键值
  2. 我删除了那个条目.
  3. 循环中的当前计数器位置+ 1将是具有None更新字典的值的新键.
  4. 我输出当前的计数器.

在我看来,这应该以一种无限循环的方式输出自然数:

0
1
2
3
4
5
.
.
.
Run Code Online (Sandbox Code Playgroud)

我认为这个想法很聪明,但是当我在Python 3.6上运行时,它会输出:

0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

是的,它在5次迭代后以某种方式停止了.显然,循环的代码块中没有基本条件或标记值,那么为什么Python只运行此代码5次?

python dictionary infinite-loop

42
推荐指数
3
解决办法
2149
查看次数

迭代3个列表的更好方法

我正在创建一个程序,它迭代图像的宽度和高度,并使用一组键.

这是一个例子:

width = [0,1,2,3,4,6,7,8,9]
height = [0,1,2,3,4]
keys = [18,20,11]
Run Code Online (Sandbox Code Playgroud)

宽度和高度是一个整数范围,直到宽度和高度的大小.键是任何一组数字(实际上是ASCII值),但不是有序数字.

我想输出是这样的:

0 0 18
0 1 20
0 2 11
0 3 18
0 4 20
1 0 11
1 1 18
. . ..
9 0 20
9 1 11
9 2 18
9 3 20
9 4 11
Run Code Online (Sandbox Code Playgroud)

如您所见,宽度和高度可以使用嵌套for循环生成,而键可以在彼此之间循环.

这是我的解决方案:

w = [0,1,2,3,4,6,7,8,9]
h = [0,1,2,3,4]
k = [18,20,11]

kIndex = 0

for i in w:
    for j in h:
        print(i,j,k[kIndex])
        # Cycle through the keys …
Run Code Online (Sandbox Code Playgroud)

python

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

使用 PIL 将复制的图像以不同像素保存到原始图像

我需要制作图像的副本来操作它,但是保存原始图像和打开复制的图像的像素值似乎有所不同:

from PIL import Image

# Open original image
img = Image.open("mountain.jpg")
data = img.load()

# Display individual pixels
print("Pixel 1: {}".format(data[0,0]))
print("Pixel 2: {}".format(data[0,1]))
print("Pixel 3: {}".format(data[0,2]))

# Makes a copy of the input image and loads the copied image's pixel map
copyImage = img.copy()

copyImage.save('copy.jpg')
copyImage.close()

# Opens the copied image that was saved earlier and its pixel map
copy = Image.open("copy.jpg")
copy_data = copy.load()

print()

# Display copied images' individual pixels
print("Pixel 1 (copy): {}".format(copy_data[0,0]))
print("Pixel 2 …
Run Code Online (Sandbox Code Playgroud)

python python-imaging-library

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