在 Python 中创建具有重复值的整数列表
Create a list of integers with duplicate values in Python
这个问题对于 Python 2.7 专家(或发烧友)来说无疑是小菜一碟,所以就在这里。
如何创建一个整数列表,其值与原始值重复,就像这样?
a = list([0, 0, 1, 1, 2, 2, 3, 3, 4, 4])
这样做真的很容易:
for i in range(10): a.append(int(i / 2))
但我宁愿将它放在一个简单的行中,从 = 所需的输出开始。
感谢您抽出时间回答。
PS。 none 的“可能已经有了您的答案 的问题正是我要找的。
>>> [i//2 for i in xrange(10)]
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
一个简单的通用方法:
>>> f = lambda rep, src: reduce(lambda l, e: l+rep*[e], src, [])
>>> f(2, xrange(5))
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
>>> f(3, ['a', 'b'])
['a', 'a', 'a', 'b', 'b', 'b']
sorted( range(10) + range(10) )
>>> sorted(2*range(5))
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
[int(i/2 )for i in range(10)]
或
[i//2 for i in range(10)]
>>> sorted(map(str, range(0,5) + range(0,5)))
['0', '0', '1', '1', '2', '2', '3', '3', '4', '4']
这是一种适用于任何列表的技术,而不仅仅是 int
列表,并且不依赖于(相对)昂贵的 sorted()
函数。它还允许您指定重复次数。
首先,一个简单的版本来解决OP中的问题:
print [u for v in [[i,i] for i in range(5)] for u in v]
输出
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
现在是花哨的(但更易读)版本。
a = list('abcde')
rep = 3
print [item for sublist in [rep * [i] for i in a] for item in sublist]
输出
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'e', 'e', 'e']
这是上一个示例的扩展版本,使用简单的 for
循环而不是嵌套列表理解编写。
b = []
for sublist in [rep * [i] for i in a]:
for item in sublist:
b.append(item)
print b
其他答案涵盖了问题中提出的具体情况,但如果您想复制任意列表的内容,可以使用以下内容:
>>> import itertools
>>> l = [1, 'a', 3]
>>> list(itertools.chain.from_iterable(zip(l,l)))
[1, 1, 'a', 'a', 3, 3]
这个问题对于 Python 2.7 专家(或发烧友)来说无疑是小菜一碟,所以就在这里。
如何创建一个整数列表,其值与原始值重复,就像这样?
a = list([0, 0, 1, 1, 2, 2, 3, 3, 4, 4])
这样做真的很容易:
for i in range(10): a.append(int(i / 2))
但我宁愿将它放在一个简单的行中,从 = 所需的输出开始。
感谢您抽出时间回答。
PS。 none 的“可能已经有了您的答案 的问题正是我要找的。
>>> [i//2 for i in xrange(10)]
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
一个简单的通用方法:
>>> f = lambda rep, src: reduce(lambda l, e: l+rep*[e], src, [])
>>> f(2, xrange(5))
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
>>> f(3, ['a', 'b'])
['a', 'a', 'a', 'b', 'b', 'b']
sorted( range(10) + range(10) )
>>> sorted(2*range(5))
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
[int(i/2 )for i in range(10)]
或
[i//2 for i in range(10)]
>>> sorted(map(str, range(0,5) + range(0,5)))
['0', '0', '1', '1', '2', '2', '3', '3', '4', '4']
这是一种适用于任何列表的技术,而不仅仅是 int
列表,并且不依赖于(相对)昂贵的 sorted()
函数。它还允许您指定重复次数。
首先,一个简单的版本来解决OP中的问题:
print [u for v in [[i,i] for i in range(5)] for u in v]
输出
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4]
现在是花哨的(但更易读)版本。
a = list('abcde')
rep = 3
print [item for sublist in [rep * [i] for i in a] for item in sublist]
输出
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'e', 'e', 'e']
这是上一个示例的扩展版本,使用简单的 for
循环而不是嵌套列表理解编写。
b = []
for sublist in [rep * [i] for i in a]:
for item in sublist:
b.append(item)
print b
其他答案涵盖了问题中提出的具体情况,但如果您想复制任意列表的内容,可以使用以下内容:
>>> import itertools
>>> l = [1, 'a', 3]
>>> list(itertools.chain.from_iterable(zip(l,l)))
[1, 1, 'a', 'a', 3, 3]