gpt4 book ai didi

python - 使 python itertools 在多种条件下工作

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:30 24 4
gpt4 key购买 nike

我正在尝试学习 python itertools(到目前为止很喜欢它!),但我遇到了一个问题。我有以下两个列表:

a=["http://www.xyz.com/jhuh7287", "http://www.hjuk.com/kashjh716", "http://www.psudjg.com/9279jshkoh", "http://www.xyz.com/jhuh7287",  "http://www.xyz.com/9289jhjbg"]
data=["k","some small string here", "so med string here", "some string here","l"]
tempstring="http://www.xyz.com"

最初,我想要的是删除所有低于一定长度的字符串的data[i],然后删除a中的相应条目。为此,我使用了以下内容:

iselectors = [x is not len(str(x))>1 for x in data]
data=list(itertools.compress(data, iselectors))
a=list(itertools.compress(a, selectors))

..效果很好。现在,我需要向我的 iselectors 添加另一个条件,它声明只有当“tempstring 在 a[i] 中”并且 len(str(x))>1..

所以,我尝试过类似的方法:

iselectors = [tempstring in a and x is not len(str(x))>1 for x in data]

...但我不确定这是对的,因为我不认为当我使用“tempstring in a”时我正在遍历整个 a

任何指导将不胜感激。谢谢。

最佳答案

最简单的方法是解决它:

>>> pprint(zip(data, a))
[('k', 'http://www.xyz.com/jhuh7287'),
('some small string here', 'http://www.hjuk.com/kashjh716'),
('so med string here', 'http://www.psudjg.com/9279jshkoh'),
('some string here', 'http://www.xyz.com/jhuh7287'),
('l', 'http://www.xyz.com/9289jhjbg')]

>>> [ (av, dv) for av, dv in zip(a, data) if len(av) > 1 and tempstring in av]
[('http://www.xyz.com/jhuh7287', 'k'), ('http://www.xyz.com/jhuh7287', 'some string here'), ('http://www.xyz.com/9289jhjbg', 'l')]

因此进行一些重构:

selectors = (tempstring in dv for av, dv in izip(a, data) if len(av) > 1)

由于@mgilson 删除了他的关键点答案 - 我希望 OP 已经接受了,我将重新发布他对这个答案的措辞:

Also, is is used to compare object identities. While this check works for small integers in Cpython (1 is len(str(1))), it's not guaranteed to work with other python implementations (nor is it guaranteed to work in Cpython in the future). I think you just want len(str(x))>1.

关于python - 使 python itertools 在多种条件下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com