创建一个列表理解,将列表中的某些值重复 X 次,然后移动到下一个项目

问题描述 投票:0回答:0

我有一个非常具体的用例来创建列表理解,但我在弄清楚如何去做时遇到了一些麻烦。我确信一定有一种方法或功能可以帮助我,但我想我不知道它。

场景如下: 以下代码按预期工作并生成所有预期的变化(总共 8 个)

List_A = ["apples","oranges"]
List_B = ["meat","chicken"]
flexibility = range(2)

list = []
for a in List_A:
    results = [(day, b, a) for day in flexibility for b in List_B]
    list.append(results)
print (list)

结果

[[(0, 'meat', 'apples'), (0, 'chicken', 'apples'), (1, 'meat', 'apples'), (1, 'chicken', 'apples')], 
 [(0, 'meat', 'oranges'), (0, 'chicken', 'oranges'), (1, 'meat', 'oranges'), (1, 'chicken', 'oranges')]]

这是并发症。假设我的速率限制为每秒 5 次调用,并且上面的列表创建了 8 个元素,因此我会超出速率限制。我认为我可以克服这个问题的方法是创建另一个变量以传递给将使用不同帐户发出我的 api 请求的函数。理论上,每个帐户只会发出 5 个请求。因此,在我上面的示例中,列表的前 5 个元素将使用帐户 0,其余 3 个将使用帐户 1。 我尝试使用列表理解来实现这一点,但结果不是我所期望的:

no = [0,1,2]
List_A = ["apples","oranges"]
List_B = ["meat","chicken"]
flexibility = range(2)

list = []
for a in List_A:
    results = [(day, b, a,n) for day in flexibility for b in List_B for n in no]
    list.append(results)
print (list)

结果

[[(0, 'meat', 'apples', 0), (0, 'meat', 'apples', 1), (0, 'meat', 'apples', 2), (0, 'chicken', 'apples', 0), (0, 'chicken', 'apples', 1), (0, 'chicken', 'apples', 2), (1, 'meat', 'apples', 0), (1, 'meat', 'apples', 1), (1, 'meat', 'apples', 2), (1, 'chicken', 'apples', 0), (1, 'chicken', 'apples', 1), (1, 'chicken', 'apples', 2)], 
 [(0, 'meat', 'oranges', 0), (0, 'meat', 'oranges', 1), (0, 'meat', 'oranges', 2), (0, 'chicken', 'oranges', 0), (0, 'chicken', 'oranges', 1), (0, 'chicken', 'oranges', 2), (1, 'meat', 'oranges', 0), (1, 'meat', 'oranges', 1), (1, 'meat', 'oranges', 2), (1, 'chicken', 'oranges', 0), (1, 'chicken', 'oranges', 1), (1, 'chicken', 'oranges', 2)]]

我的列表中的元素比我想要的多得多。我仍然想要原来的 8,但前五个将使用帐户 0,最后 3 个将使用帐户 1。

目标是得到这个列表:

[(0, 'apples', 'meat',0), 
 (0, 'apples', 'chicken',0), 
 (0, 'oranges', 'meat',0), 
 (0, 'oranges', 'chicken',0), 
 (1, 'apples', 'meat',0), 
 (1, 'apples', 'chicken',1), 
 (1, 'oranges', 'meat',1), 
 (1, 'oranges', 'chicken',1)]

我怎样才能做到这一点? 谢谢

python list-comprehension
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.