我有以下三个清单:
ov = [1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1]
participant = [1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4]
geom = ['0101000020E864000077C385FFB4231C417F437ECE83E95441', '0101000020E8640000F532AC46BA231C41A945335C84E95441', '0101000020E8640000CD138FFA46EA1A41C71D074C27E15441', '0101000020E864000087373742A94A1A41B6A39D38B0815441', '0101000020E86400003A60EE21A3231C41ACB8FFA584E95441', '0101000020E864000046717DBEB2231C4115840F5D84E95441', '0101000020E8640000AAAF4E36AB231C413AC5EB5D84E95441', '0101000020E8640000B84BD7B961231C41D245C83B85E95441', '0101000020E864000026940AB784231C417B5D79A984E95441', '0101000020E86400003FE809B587231C4102DB987E85E95441', '0101000020E8640000B8FC550A83231C41E5B0F93785E95441', '0101000020E8640000E1A849F9A1231C41009C21A684E95441', '0101000020E8640000E1A849F9A1231C41009C21A684E95441', '0101000020E864000066EB7C29A0231C41F29756A684E95441', '0101000020E86400009B3CC349DC711C41EE7E428C76E15441', '0101000020E86400008985282945681C4182B65E6F50DC5441', '0101000020E86400005B469B1AB1711C410553435A76E15441']
现在我想在以下条件下创建行:
使用geom
作为点,线通常在ov
为1
时开始,在ov
为0
时结束
除非参与者发生变化,否则新行开始
所以在我的例子中,我想使用geom
创建线字符串,其中ov
是:
linestring 1: 1, 0
linestring 2: 1, 1, 1, 1, 1, 0
linestring 3: 1, 1, 1, 0
linestring 4: 1, 1, 1
linestring 5: 1, 1
我曾想过使用for循环来实现这一点,但我不知道如何实现它:如果值正在更改,那么停止并生成一行。你知道吗
注意:问题不在于如何生成一行,而在于如何在实现中使用所有正确的值。你知道吗
希望我能解释清楚,有人能帮我,提前谢谢!你知道吗
您可以使用zip来组合这3个列表。你知道吗
假设
participant
始终是排序的,请使用itertools.groupby
根据其元素对项目进行分组:要打印每一行,请将
(ov, geom)
元素与g
(迭代器)分开,并用逗号连接:完整代码:
输出:
为清晰起见,在单独的行上打印每对项目:
相关问题 更多 >
编程相关推荐