我知道这可能是已经回答的问题,但我进行了很多搜索,但似乎找不到所需的答案。
也许我不明白这一点。 这是我所拥有的:
myarray = ['image003.jpg@01d36f77.5bf94310', 'image004.jpg@01d36f77.5bf94310']
img = ['image003.jpg', 'test', 'image004.jpg']
我正在尝试循环检查 img 是否在 myarray 中。
我尝试使用if any(i in img for m in myarrar)
或通过执行img.find(myarray[i])
有人可以帮我吗?
答案 0 :(得分:2)
img
中的myarray
do 中没有文件名。但是,它们存在于myarray
的某些元素中 ,因此您还需要一层循环。
any(fname in s for s in myarray for fname in img)
如果您需要事物存在于其中的索引:
for i, s in enumerate(myarray):
if any(fname in s for fname in img):
print(i)
答案 1 :(得分:1)
您可以在集合理解中使用str.partition来获取文件名(假设@
从该字符串列表中的其他数据中分隔文件名):
>>> myarray = ['image003.jpg@01d36f77.5bf94310', 'image004.jpg@01d36f77.5bf94310']
>>> {e.partition('@')[0] for e in myarray}
{'image003.jpg', 'image004.jpg'}
然后使用集合交集来针对列表img
测试成员资格:
>>> img = ['image003.jpg', 'test', 'image004.jpg']
>>> {e.partition('@')[0] for e in myarray} & set(img)
{'image003.jpg', 'image004.jpg'}
如果要在img
中的myarray
中获得每个元素的索引,可以执行以下操作:
ref={e.partition('@')[0] for e in myarray}
for i,fn in enumerate(img):
if fn in ref: print(i,fn)
或更简洁:
>>> [(i,fn) for i,fn in enumerate(img) if fn in {e.partition('@')[0] for e in myarray}]
[(0, 'image003.jpg'), (2, 'image004.jpg')]