l1 = [1, 2, 3, 4]
l2 = [(10, 20), (30, 40), (50, 60), (70, 80)]
>>> print(list(zip(l1, l2)))
[(1, (10, 20)), (2, (30, 40)), (3, (50, 60)), (4, (70, 80))]
但是,我希望它只是一个包含四个元组的列表:
[(1, 10, 20), (2, 30, 40), (3, 50, 60), (4, 70, 80)]
我也尝试过:
>>> print(list(zip(l1, *l2)))
[(1, 10, 30, 50, 70), (2, 20, 40, 60, 80)]
所以我的问题是:
如何使用元组列表或列表列表压缩列表?
答案 0 :(得分:8)
解决此问题的一种更通用的方法是考虑将这两个列表按比例放大/缩小到相同的维度
Java.lang.Class.getDeclaredFields()
如您的示例所示,第二个列表与第一个列表相比具有额外的维度,
在这种特殊情况下,第一种方法更容易,因此是显而易见的选择
答案 1 :(得分:4)
<packagingExcludes>app/*/*.js</packagingExcludes>
答案 2 :(得分:1)
你需要
l1 = [1, 2, 3, 4]
l2 = [(10, 20), (30, 40), (50, 60), (70, 80)]
print [(a, b[0], b[1]) for a, b in list(zip(l1, l2))]
这样的工作方式如下:zip
创建一个数组,其中包含l1
和l2
>>> zip (l1, l2)
[(1, (10, 20)), (2, (30, 40)), (3, (50, 60)), (4, (70, 80))]
for i, j in zip(l1, l2)
将值解包为i和j,在每次循环迭代中从每个数组中依次拾取一个元素;即第一次迭代中的1
和(10, 20)
,第二次中的2
和(30, 40)
等等。
然后,您可以重新调整值以创建所需的元组。您可以使用(a, b[0], b[1])
或(a, ) + b
执行此操作。 Abhijit使用的后一种方法可能比我的方法更有效,这是基于你可以添加元组的事实(例如(1, 2) + (3, 4) + (5,)
等于(1, 2, 3, 4, 5)
)。
如果你想对数字做什么并不是太复杂,你可以在for
表达式的开头而不是仅仅创建元组。也许你可以通过这种方式使你的代码更紧凑。
答案 3 :(得分:1)
如果让我这样做,它将如下所示:
l1 = [1, 2, 3, 4]
l2 = [(10, 20), (30, 40), (50, 60), (70, 80)]
print [ (a,b[0],b[1]) for a, b in zip(l1, l2)]
所以你必须知道zip()
如何使用:
此函数返回元组列表,其中第i个元组包含来自每个参数序列或迭代的第i个元素。返回的列表的长度被截断为最短参数序列的长度。当有多个参数长度相同时,zip()类似于map(),初始参数为None。使用单个序列参数,它返回一个1元组的列表。没有参数,它返回一个空列表。
答案 4 :(得分:1)
假设len(l1)== len(l2)
,只需用显式for循环放下另一种方式for x in range(0,len(l1)):
print (l1[x],l2[x][0],l2[x][1])