目前我正在这样做:
# duplicates is a list
uniques = list(set(duplicates))
Run Code Online (Sandbox Code Playgroud)
然而,独特性往往是短暂的。构建一个唯一的生成器会更好吗?如果是这样,我该怎么做?
使用 javascript,我创建了一个 1000px x 1000px 的画布,在“播放”时会用随机大小、随机颜色的矩形填充自身。有趣,但结果很花哨。为了进一步完善它,我希望它锁定某种可能由其第一次迭代确定的调色板,然后在整个游戏中保持宽松的调色板。然后我想让它做出“偶然的”奇怪的选择,但前提是矩形很小,即很小的强调色。但我可以稍后自己弄清楚。我在这里发现了一个获得高票数的生成器,很有趣,但作者是用 Java 编写的。不幸的是,我仍然是 javascript 的菜鸟(!)有人可以告诉我如何翻译它吗?欢迎提出替代建议。如果我能弄清楚应该在哪里发布它,我很乐意分享我的脚本。毫无疑问,会有很多关于改进我的代码的建议......这是我指的生成器: 随机生成美观调色板的算法 提前非常感谢!
我有类似于此结构的代码:
def my_gen(some_str):
if some_str == "":
raise StopIteration("Input was empty")
else:
parsed_list = parse_my_string(some_str)
for p in parsed_list:
x, y = p.split()
yield x, y
for x, y in my_gen()
# do stuff
# I want to capture the error message from StopIteration if it was raised manually
Run Code Online (Sandbox Code Playgroud)
是否可以通过使用 for 循环来做到这一点?我在其他地方找不到类似的案例。如果无法使用 for 循环,还有哪些其他替代方案?
谢谢
我试图按顺序产生一系列传奇效果。这个想法是它将并行yield all([call(foo), call(bar])运行(或者至少以伪并行方式)。call(foo)call(bar)
但是,我希望我的传奇按顺序运行,这意味着我想在启动之前等待foo结束bar(这样我可以取消该过程)。
这个调用数组是动态生成的,所以我可以硬写一系列的yield. 在这种情况下,正确的语法是什么?
我有一个在生成器上循环的代码。如果第二次迭代到达它,我必须打破该循环。为此,我使用,它在调用该方法时break引发 a 。GeneratorExitGenerator.close()
for page in limit_handled(tweepy.Cursor(..., ..., ...):
while len(the_list) < 400:
for status in page:
def process_status(tweet):
...
...
the_list.append(process_status(status))
break
Run Code Online (Sandbox Code Playgroud)
是否有一种更优雅的方法可以避免此类错误?
Exception ignored in: <generator object limit_handled at 0x000000003AB300A0>
RuntimeError: generator ignored GeneratorExit
Run Code Online (Sandbox Code Playgroud)
我已经看到了这两个问题的答案:如何获取第一个 N... 如何获取下一个 n...但这不是同一个问题。就我而言,Generator使用Cursor. 因此,在每次迭代时它都会处理一个查询。我想在达到至少 400 个状态后停止查询,这可能在第二次或第三次迭代之后发生(查询通常返回 200 行,但也可以更少)。此处不能选择对生成器进行切片。避免处理所有查询(总共 16 个,大约 16*200=3200 个状态)正是我想通过在返回 400 个状态后破坏代码来避免的。
编辑:为了更好地理解,这里是我的生成器的代码:
def limit_handled(cursor):
global user_timeline_remaining
while True:
if user_timeline_remaining>1:
try:
yield cursor.next()
except BaseException as e:
print('failed_on_CURSOR_NEXT', str(e))
else: …Run Code Online (Sandbox Code Playgroud) 假设我有以下内容:
image_data_generator = ImageDataGenerator(rescale=1./255)
train_generator = image_data_generator.flow_from_directory(
'my_directory',
target_size=(28, 28),
batch_size=32,
class_mode='categorical'
)
Run Code Online (Sandbox Code Playgroud)
然后 mytrain_generator填充来自 的数据my_directory,其中包含两个子文件夹,将数据分为类0和1.
假设我还有另一个目录that_directory,也将数据拆分为类0和1. 我想train_generator用这个额外的数据来增强我的。
运行train_generator = image_data_generator.flow_from_directory('that_directory', ...)会从 中删除先前的数据my_directory。
有没有办法在DirectoryIterator不改变文件夹结构本身的情况下将两组数据增加或附加到一个生成器或一个像 a 一样操作的对象中?
Below generator function is too slow. Is there a way by which we can optimise this code ?. train_dataset_c1 is train dataset for Class 1 of the form image,1 train_dataset_c0 is train dataset for Class 0 of the form image,0
def generator(positive_dataset, negative_dataset):
while True:
for pos_rec, neg_rec in zip(positive_dataset, negative_dataset):
pos_x, pos_y = pos_rec
neg_x, neg_y = neg_rec
x = tf.concat([pos_x, neg_x], axis=0)
y = tf.concat([pos_y, neg_y], axis=0)
yield x, y
train_generator = generator(train_dataset_c1, train_dataset_c0)
test_generator = generator(test_dataset_c1, test_dataset_c0)
Run Code Online (Sandbox Code Playgroud) 为什么这样做:
def even_gen():
n = 0
while True:
yield n
n += 2
evens_ = even_gen()
evens = list(next(evens_) for _ in range(5))
#[0,2,4,6,8]
Run Code Online (Sandbox Code Playgroud)
但这不会:
def even_gen():
n = 0
while True:
yield n
n += 2
evens = list(next(evens_gen()) for _ in range(5))
#[0,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
唯一的区别是在列表函数内移动生成器。我发现我们需要首先将它分配给一个变量,然后它才能工作,这是非常奇怪的......
什么原因?
我必须写吗
def count10():
for i in range(10):
yield i
gen = count10()
for j in gen:
print(j)
gen.close()
Run Code Online (Sandbox Code Playgroud)
节省内存,或者只是
def count10():
for i in range(10):
yield i
for j in count10():
print(j)
Run Code Online (Sandbox Code Playgroud)
其实我很想了解 Python 生成器生命周期的细节,但是没有找到相关资源。
假设我们有 3 个数组,索引,a 和 b。如何创建仅通过索引一次的数组 c 和 d?
c = [a[i] for i in index]
d = [b[i] for i in index]
Run Code Online (Sandbox Code Playgroud)
有没有办法用单一生成器创建这些数组?
generator ×10
python ×7
break ×1
colors ×1
exception ×1
java ×1
javascript ×1
keras ×1
python-2.7 ×1
python-3.x ×1
random ×1
redux ×1
redux-saga ×1
yield ×1