例如我有以下内容
list = [['1', '2'], ['1', '3'], ['1', '4'], ['1', '5'], ['2', '1'], ['4', '1'], ['2', '6']]
如果一个子列表在同一个列表中有一个反向子列表(即 ['1', '2'] = ['2', '1']),我想匹配,如果是 True 则从中删除列出镜像的。
最终列表应如下所示:
list = [['1', '2'], ['1', '3'], ['1', '4'], ['1', '5']['2', '6']]
这是我尝试过的:
for i in range(len(list)):
if list[i] == list[i][::-1]:
print("Match found")
del list[i][::-1]
print(list)
但最后我得到了与原始列表相同的列表。我不确定我的匹配条件是否正确。
最佳答案
您可以遍历列表的元素,并使用 set
跟踪到目前为止已经看到的那些。使用集合是检查成员资格的更方便的方法,因为操作 has a lower complexity ,在这种情况下,您需要使用元组,因为列表不可散列。如果没有看到实际的元组或 reversed
,则保留这些项目(如果你只想忽略那些有 reversed 的项目,你只需要 if tuple (在 s 中反转(t))
):
s = set()
out = []
for i in l:
t = tuple(i)
if t in s or tuple(reversed(t)) in s:
continue
s.add(t)
out.append(i)
print(out)
# [['1', '2'], ['1', '3'], ['1', '4'], ['1', '5'], ['2', '6']]
https://stackoverflow.com/questions/61631914/
相关文章:
node.js - Yarn workspaces——包别名
ruby-on-rails - 如何在 Ruby on Rails 6 中将 rich_text_a
svelte - 如何替换 Svelte 中目标的内容而不是附加到子项?
delphi - 如何在 Delphi 10.3 Rio 上安装 Indy?
javascript - AWS Elastic Beanstalk : How to change
c# - 如何使用 Sustainsys.Saml2 设置 NLog
python - 如何聚焦光线或如何在 pygame 中只绘制窗口的某些圆形部分?
c# - 为什么 Visual Studio 不警告我空引用异常?