根据索引的排列使用映射访问列表的元素
Access the element of a list with map based on permutations of the indices
我想要的是使用 map
所有排列的索引对列表访问元素,而不使用 for
循环:
起始代码:
from itertools import permutations
# string list
n=['foo','asda','bar','words']
# pair permutation object
index = permutations(range(0,len(n)), 2)
list(index)
Out[0]:[(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)]
所以,通过使用 map
我想得到像下面代码一样的元素,在这种情况下是用 for
循环制作的:
for idx in index:
i=n[idx[0]]
j=n[idx[1]]
print ((i,j))
期望的输出(如果你运行前面的例子):
('foo', 'asda')
('foo', 'bar')
('foo', 'words')
('asda', 'foo')
('asda', 'bar')
('asda', 'words')
('bar', 'foo')
('bar', 'asda')
('bar', 'words')
('words', 'foo')
('words', 'asda')
('words', 'bar)
不知道我是否理解你的需要,但这给出了与 map
:
相同的输出
for i in map(lambda x: (n[x[0]], n[x[1]], total_len(n[x[0]], n[x[1]])), index):
print i
#('foo', 'asda', 7)
#('foo', 'bar', 6)
#('foo', 'words', 8)
#('asda', 'foo', 7)
#('asda', 'bar', 7)
#('asda', 'words', 9)
#('bar', 'foo', 6)
#('bar', 'asda', 7)
#('bar', 'words', 8)
#('words', 'foo', 8)
#('words', 'asda', 9)
#('words', 'bar', 8)
要删除 total_len
,您可以使用:
map(lambda x: (n[x[0]], n[x[1]]), index)
注意:如果你正在使用 python 3.x map()
returns 迭代器,不像 python 2.x returns list
,因此您需要将其转换为 list()
.
而且,如你所知,这也非常有效:
list(permutations(n, 2))
您可以简单地创建列表的排列而不是索引:
from itertools import permutations
n=['foo','asda','bar','words']
index = list(permutations(n, 2))
print(index)
打印:
[('foo', 'asda'),
('foo', 'bar'),
('foo', 'words'),
('asda', 'foo'),
('asda', 'bar'),
('asda', 'words'),
('bar', 'foo'),
('bar', 'asda'),
('bar', 'words'),
('words', 'foo'),
('words', 'asda'),
('words', 'bar')]
如果你只想 "print" 它们,你可以使用 map
和 print
。虽然使用 map
有点丑陋,因为它有副作用,但它似乎可以做你想做的事:
from __future__ import print_function
_ = list(map(print, index))
我最接近的是:
from itertools import permutations
# string list
n=['foo','asda','bar','words']
# pair permutation object
index = permutations(xrange(0,len(n)), 2)
list(zip(n, n, range(4)))*3
输出:
[('foo', 'foo', 0),
('asda', 'asda', 1),
('bar', 'bar', 2),
('words', 'words', 3),
('foo', 'foo', 0),
('asda', 'asda', 1),
('bar', 'bar', 2),
('words', 'words', 3),
('foo', 'foo', 0),
('asda', 'asda', 1),
('bar', 'bar', 2),
('words', 'words', 3)]
我想要的是使用 map
所有排列的索引对列表访问元素,而不使用 for
循环:
起始代码:
from itertools import permutations
# string list
n=['foo','asda','bar','words']
# pair permutation object
index = permutations(range(0,len(n)), 2)
list(index)
Out[0]:[(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)]
所以,通过使用 map
我想得到像下面代码一样的元素,在这种情况下是用 for
循环制作的:
for idx in index:
i=n[idx[0]]
j=n[idx[1]]
print ((i,j))
期望的输出(如果你运行前面的例子):
('foo', 'asda')
('foo', 'bar')
('foo', 'words')
('asda', 'foo')
('asda', 'bar')
('asda', 'words')
('bar', 'foo')
('bar', 'asda')
('bar', 'words')
('words', 'foo')
('words', 'asda')
('words', 'bar)
不知道我是否理解你的需要,但这给出了与 map
:
for i in map(lambda x: (n[x[0]], n[x[1]], total_len(n[x[0]], n[x[1]])), index):
print i
#('foo', 'asda', 7)
#('foo', 'bar', 6)
#('foo', 'words', 8)
#('asda', 'foo', 7)
#('asda', 'bar', 7)
#('asda', 'words', 9)
#('bar', 'foo', 6)
#('bar', 'asda', 7)
#('bar', 'words', 8)
#('words', 'foo', 8)
#('words', 'asda', 9)
#('words', 'bar', 8)
要删除 total_len
,您可以使用:
map(lambda x: (n[x[0]], n[x[1]]), index)
注意:如果你正在使用 python 3.x map()
returns 迭代器,不像 python 2.x returns list
,因此您需要将其转换为 list()
.
而且,如你所知,这也非常有效:
list(permutations(n, 2))
您可以简单地创建列表的排列而不是索引:
from itertools import permutations
n=['foo','asda','bar','words']
index = list(permutations(n, 2))
print(index)
打印:
[('foo', 'asda'),
('foo', 'bar'),
('foo', 'words'),
('asda', 'foo'),
('asda', 'bar'),
('asda', 'words'),
('bar', 'foo'),
('bar', 'asda'),
('bar', 'words'),
('words', 'foo'),
('words', 'asda'),
('words', 'bar')]
如果你只想 "print" 它们,你可以使用 map
和 print
。虽然使用 map
有点丑陋,因为它有副作用,但它似乎可以做你想做的事:
from __future__ import print_function
_ = list(map(print, index))
我最接近的是:
from itertools import permutations
# string list
n=['foo','asda','bar','words']
# pair permutation object
index = permutations(xrange(0,len(n)), 2)
list(zip(n, n, range(4)))*3
输出:
[('foo', 'foo', 0),
('asda', 'asda', 1),
('bar', 'bar', 2),
('words', 'words', 3),
('foo', 'foo', 0),
('asda', 'asda', 1),
('bar', 'bar', 2),
('words', 'words', 3),
('foo', 'foo', 0),
('asda', 'asda', 1),
('bar', 'bar', 2),
('words', 'words', 3)]