Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据列表中的元素数停止迭代?_Python_List - Fatal编程技术网

Python 如何根据列表中的元素数停止迭代?

Python 如何根据列表中的元素数停止迭代?,python,list,Python,List,我有一个项目,我必须按时获得中元素的后续元素 例如: j_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] s_follow_int = [[2, 3], 4, [5, 6], [6, 8], [7, 8], 9, 8, 10, 10, 11] on_time = [4, 5] 我的代码如下所示: #除1外,其他元素都在准时完成 跟随完成动作=[] 对于拉链中的a,d(j_集,s_follow_int): 如果a在on_时间和a!=1: 如果len(开启时间)

我有一个项目,我必须按时获得
中元素的后续元素

例如:

j_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
s_follow_int = [[2, 3], 4, [5, 6], [6, 8], [7, 8], 9, 8, 10, 10, 11]
on_time = [4, 5]
我的代码如下所示:

#除1外,其他元素都在准时完成
跟随完成动作=[]
对于拉链中的a,d(j_集,s_follow_int):
如果a在on_时间和a!=1:
如果len(开启时间)>1:
跟随完成动作。附加(d)
其他:
跟随完成动作=d
我得到的输出:

follow_finish_act =  [[6, 8], [7, 8]]
预期产出:

follow_finish_act = [6, 7, 8]
当on_时间长度超过1时,我遇到问题。我认为问题在于将不规则列表(可以是嵌套列表和整数列表)展平,而不存在重复列表。因为,我无法获得预期的输出

如有任何帮助/建议,将不胜感激!谢谢大家!

编辑:我用来尝试展平follow\u finish\u act的输出的代码

def flatten(lss):
    for item in lss:
        try:
            yield from flatten(item)
        except TypeError:
            yield item

很难说出您真正想要的是什么,但是查看代码很多时候似乎都是多余的。请尝试以下方法:

j_set = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
s_follow_int = [[2, 3], 4, [5, 6], 8, 7, 9, 8, 10, 10, 11]
on_time = [6, 5]

follow_finish_act = []
for a, d in zip(j_set, s_follow_int):
    if a in on_time:
        follow_finish_act.append(d)

print(follow_finish_act)
输出:

[7, 9]
如果随后得到如下输出:
[9]
,则可以在以后执行此操作:

if len(follow_finish_act) == 1:
    follow_finish_act = follow_finish_act[0]

通过使用
set
而不是
list

j_集=[1,2,3,4,5,6,7,8,9,10,11]
s_follow_int=[2,3,4,5,6,6,8,7,8,9,8,10,10,11]
on_时间=[4,5]
跟随完成动作=集合()
对于拉链中的a,d(j_集,s_follow_int):
如果a在on_时间和a!=1:
如果len(开启时间)>1:
跟进完成行动。更新(d)
其他:
跟进完成行动。更新(d)
打印(后续完成)
#印刷品{6,7,8}
打印(列表(后续完成)
#印刷品[8,7,6]

我在修好后得到了11的输出,变得更像Python。如果你解释一下这些数据代表了什么以及你的目标是什么,这整件事就会变得非常混乱和容易理解。@Frank我想得到上面所示的预期输出,而for循环禁止我这样做。我只是认为我需要for循环,因为我必须在_时间检查每个元素,并确保它不等于1。如果是这样的话,我就不必让它继续下去了。如果不是,则获得follow\u finish\u act。您的代码试图实现什么?你能分享更多细节吗。仅仅一个示例输入和输出是不够的。@Suraj我实际上是在准时获得活动的后续活动(用s\u follor\u int表示)。到目前为止,通过上面编辑的代码,我得到了这样的输出。但是对于代码的后续部分,我希望它在一个列表中没有重复项。我试图将代码的输出平坦化,但它不起作用。@SurajSubramanian我留下了一条评论!请一定要看。非常感谢。我想做的事情是检查on_time中的元素是否不等于1,从而检查for循环部分。如果on_time=[1],那么,我不必让它完成后续动作。如果是任何数字,则获得follow_finish_act。但是,如果
on_time=[4,5]
,那么如果
a
1
,则
a on_time
将永远不会为真。如果您想确保
on\u time
本身不包含
1
,那么您可以拥有
new\u on\u time=[i for i in on\u time If i!=1]
谢谢!但我试着及时混合和匹配元素。对于on_time=[2,3],请按照[4,5,6]完成。但是我得到一个错误,因为4是一个整数。然后尝试将
s\u follow\u int
中的所有元素转换为
list
。所以你不会遇到这样的错误。我已经尝试使用.tolist转换它,但是s_follow_int已经是一个列表了。另外,我的代码的后续部分希望s_follow_int保持原样。好的,您可以使用以下命令:
s_follow_int1=[[item]如果type(item)==type(4)else item for item in s_follow_int]
将所有元素转换为列表。我可以建议对这部分代码使用
s\u follow\u int1
,以后再使用
s\u follow\u int
。我无法想出更好的逻辑,因为我无法理解全部目标,希望这能有所帮助。让我知道它是否适用于您:)您好,当我尝试按原样运行它时,代码似乎正在工作。但是当我把它和我的代码放在一起时,我有一个错误。是否可以继续聊天,这样我就可以给你我正在做的项目的全部细节?