Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对使用特定索引值的产品使用itertools?_Python_List_Product_Indexof_Itertools - Fatal编程技术网

Python 如何对使用特定索引值的产品使用itertools?

Python 如何对使用特定索引值的产品使用itertools?,python,list,product,indexof,itertools,Python,List,Product,Indexof,Itertools,以下代码输出: import itertools as it list(it.product(['A', 'T'], ['T', 'G'])) Out[230]: [('A', 'T'), ('A', 'G'), ('T', 'T'), ('T', 'G')] 但是,如果列表是: ['A', '/', 'T'], ['T', '/', 'G'] ['C', '|', 'T'], ['A', '|', 'C'] 我想要 [('A', 'T'), ('A', 'G'), ('T', 'T'),

以下代码输出:

import itertools as it
list(it.product(['A', 'T'], ['T', 'G']))
Out[230]: [('A', 'T'), ('A', 'G'), ('T', 'T'), ('T', 'G')]
但是,如果列表是:

['A', '/', 'T'], ['T', '/', 'G']
['C', '|', 'T'], ['A', '|', 'C']
我想要

[('A', 'T'), ('A', 'G'), ('T', 'T'), ('T', 'G')]
[('C', 'A'), ('T', 'C')]
这意味着:

list(it.product(['A', '/', 'T'], ['T', '/', 'G'])) if '/' in the list
else list(it.product(['A', '/', 'T'], ['T', '/', 'G'])) if '|' in the list
如何在不删除
/
|
的情况下获得相同的结果,因为这是一个条件

我认为使用索引可能有效,并尝试了以下方法:

list(it.product(['A', '/', 'T'], ['T', '/', 'G']).index([0,2))
和其他几个过程,但没有帮助


此代码是一个大代码的尾部,因此我不尝试构建任何函数或删除
/

您可以应用
过滤器

>>> from itertools import product

>>> list(filter(lambda x: '/' not in x, product(['A', '/', 'T'], ['T', '/', 'G'])))
[('A', 'T'), ('A', 'G'), ('T', 'T'), ('T', 'G')]
或者事先排除它们(这次我使用了与
过滤器相当的方法:有条件的理解):


请注意,当您将其与
枚举
结合使用时,也可以使用索引进行筛选:

list(product([item for idx, item in enumerate(a) if idx != 1],
             [item for idx, item in enumerate(b) if idx != 1]))
或者,如果对索引有简单的条件,则对列表进行切片也是一个选项:

>>> list(product(a[:2], b[:2]))
[('A', 'T'), ('A', '/'), ('/', 'T'), ('/', '/')]

我更新了一点情况。请你再看看这个问题。你能澄清一下实际情况吗?我当时的印象是我理解你的意思-但是考虑到你的新例子(
['C'、'.'T'、'T']、['A'、'.'、'C']
):有什么规则吗?你的意思是:
[zip中的项目(['A'、'.'、'T']、['T'、'T'、'T'、'G'])如果项目中没有“
?但现在这是一个完全不同的问题
applymap
并不等同于pythons过滤器,因此它甚至与答案无关。你能再问一个问题吗?只需猜测一下
.applymap(lambda c:','.join('g'。如果'/'不在t中,则连接(t)表示t.product(*c)如果'/'不在t中))
.applymap(lambda c:','.join('g'.join(t)表示t在it中。product(*c)如果'/'不在t中,则连接(t)如果'/'在c中,则连接('else')。'?还有一个建议:请提出一个新问题。你可以明确地链接到这个问题和其他问题,但是如果你每个问题只问一个问题,你可能会得到更好的答案。
>>> list(product(a[:2], b[:2]))
[('A', 'T'), ('A', '/'), ('/', 'T'), ('/', '/')]