对列表进行排序并在正确的位置添加无值

Aub*_*rey 2 python list

这与这个问题有某种关系.

我必须列出网址.第一个清单是:

http://example.com/1/1.jpg
http://example.com/2/2.jpg
http://example.com/3/3.jpg
...
http://example.com/45000/45000.jpg
Run Code Online (Sandbox Code Playgroud)

第二个列表是第一个列表的一个子集:它由真实 URL组成,不是断开链接.

http://example.com/12/12.jpg
http://example.com/23/23.jpg
http://example.com/34/34.jpg
...
Run Code Online (Sandbox Code Playgroud)

我想知道如何以一种我可以拥有这样的方式对它进行排序

...
None
http://example.com/12/12.jpg
None
None
...
None
http://example.com/23/23.jpg
None
...
Run Code Online (Sandbox Code Playgroud)

关键是要有一个排序列表,我可以在最终的csv文件中将正确的URL放在正确的位置.

我试过这个读取第一个列表并尝试匹配第二个列表中的项目,但我没有使用双循环和匹配模式.

我从文件中读取列表,使用open():这意味着我必须处理换行符(这似乎是一个问题).

Bha*_*Rao 5

你可以使用一个简单的list-comp和这样的三元条件

>>> orig = ['http://example.com/1/1.jpg','http://example.com/2/2.jpg','http://example.com/3/3.jpg']
>>> real = ['http://example.com/1/1.jpg']
>>> [i if i in real else None for i in orig]
['http://example.com/1/1.jpg', None, None]
Run Code Online (Sandbox Code Playgroud)

如果将real列表存储到集合中会更好,因为处理速度会更快.在这种情况下,代码将是

>>> orig = ['http://example.com/1/1.jpg','http://example.com/2/2.jpg','http://example.com/3/3.jpg']
>>> real = ['http://example.com/1/1.jpg']
>>> real_set = set(real)
>>> [i if i in real_set else None for i in orig]
[u'http://example.com/1/1.jpg', None, None]
Run Code Online (Sandbox Code Playgroud)

感谢mata和Cuadue使用套装的第二个版本.检查下面的评论.

  • 将"真实"转换为集合可能会更有效率 (2认同)
  • comp应该是`real_set = set(real); [我如果我在real_set其他没有我的原始]`获得O(n)vs O(n**2) (2认同)