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
。我无法想出更好的逻辑,因为我无法理解全部目标,希望这能有所帮助。让我知道它是否适用于您:)您好,当我尝试按原样运行它时,代码似乎正在工作。但是当我把它和我的代码放在一起时,我有一个错误。是否可以继续聊天,这样我就可以给你我正在做的项目的全部细节?