给定一个由一组有限元素组成的可迭代:
(a,b,c,d)
作为例子
从上面的iterable中生成以下(伪)有序对的Pythonic方法是什么:
ab
ac
ad
bc
bd
cd
一个简单的方法是使用for循环,但是我想知道是否有一种pythonic方法从上面的iterable生成这个列表?
答案 0 :(得分:3)
尝试使用combinations。
import itertools
combinations = itertools.combinations('abcd', n)
会给你一个迭代器,你可以循环它或将它转换成一个list(combinations)
为了仅包含示例中的对,您可以传递2作为参数:
combinations = itertools.combinations('abcd', 2)
>>> print list(combinations)
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
答案 1 :(得分:0)
您可以在列表理解中完成此任务。
data = [1, 2, 3, 4]
output = [(data[n], next) for n in range(0,len(data)) for next in data[n:]]
print(repr(output))
将理解分开,它构成了iterable的第一个成员的元组,以及由iterable的所有其他成员组成的列表中的第一个对象。 data[n:]
告诉Python在第n次之后接受所有成员。
答案 2 :(得分:0)
使用列表推导 - 它们似乎被认为是pythonic。
my favorite spot to photograph sunrises
以字符串格式获取n位二进制数,其中只有两个数字一个,n是项目的长度。
stuff = ('a','b','c','d')
为每个组合找到 1 的索引。
n = len(stuff)
s = '{{:0{}b}}'.format(n)
z = [s.format(x) for x in range(2**n) if s.format(x).count('1') ==2]
使用索引选择项目,然后排序。
y = [[i for i, c in enumerate(combo) if c == '1'] for combo in z]