【发布时间】:2015-08-15 13:54:22
【问题描述】:
所以我有一个包含子列表的列表。
例如
biglist = [['Red', 'Hi', 'There', '0.534'], ['Blue', 'Hello', 'Friend', '1.5'],
['Blue', 'Yo', 'Dude', '1.2'], ['Green', 'Bon', 'Jour', '0.1'],
['Purple', 'Hey', 'Sup', '0.4'], ['Purple', 'Greetings', 'Pal', '2.8']]
这就是我想要做的......我想通过这个迭代来执行以下操作:
- 对于每个子列表,读取位置 0。
- 如果在位置 0 存在另一个具有相同字符串的子列表,则读取位置 3
- 无论哪个数字在位置 3 中较低,将另一个子列表完全删除并保留具有较小值的子列表。有时有两个以上的子列表具有相同的位置[0]
所以,对于我的示例列表。我想保留“红色”子列表,比较两个“蓝色”子列表并将数值较小的子列表保留在特定位置 3,然后还保留“绿色”子列表。我一直在搞乱 set() 但有点难过。起初我尝试将它散列到 0 位置(红色、蓝色等)是关键的位置,其余位置是值(作为列表),但我被卡住了,走了一条不同的路线。
想要的结果:
biglist = [['Red', 'Hi', 'There', '0.534'], ['Blue', 'Yo', 'Dude', '1.2'],
['Green', 'Bon', 'Jour', '0.1'], ['Purple', 'Hey', 'Sup', '0.4']]
注意:我正在使用的列表是由前一个函数传递的。
我在另一个问题上找到了这个,但是 set() 让我有点困惑,我不知道如何进一步研究第三个位置或如何正确传递我已经通过另一个函数创建的列表在这个之前在同一个脚本中。当我在尝试传递列表时运行它时,我什么也得不到。
def unique_items(L):
found = set()
for item in L:
if item[0] not in found:
yield item
found.add(item[0])
非常感谢。
【问题讨论】:
-
我认为在原始列表和期望列表中,'Hi' 'There' 之间应该有逗号,对吗?请相应地进行编辑。我不允许编辑,因为更改的数量只有 '2' 而不是编辑所需的 '6' :-)
-
是的,谢谢,我以为我编辑了它,但一定只是在我的脚本中这样做。
标签: python list set compare sublist