从列表中提取值并生成元组

时间:2014-02-27 11:03:27

标签: python list-comprehension

我需要一件简单的事情,但我不能这样做:

list = 'SBEDFG'

我需要输出:

[(S,B),(B,E),(E,D),(D,F),(F,G)]

这就是我的尝试:

[(list[ind],list[ind+1]) for ind,i in list]

但它给了我这个错误:

ValueError: need more than 1 value to unpack
你能帮帮我吗?谢谢!

3 个答案:

答案 0 :(得分:5)

您可以像这样使用zip()函数:

>>>l = 'SBEDFG'
>>>zip(l,l[1:])
[('S', 'B'), ('B', 'E'), ('E', 'D'), ('D', 'F'), ('F', 'G')]

使用Python 3.X,您需要将zip结果转换为list

#Python 3.X
>>>l = 'SBEDFG'
>>>list(zip(l,l[1:]))
[('S', 'B'), ('B', 'E'), ('E', 'D'), ('D', 'F'), ('F', 'G')]

使用列表理解,我会使用range()函数:

>>>[(l[i],l[i+1]) for i in range(len(l)-1)]
[('S', 'B'), ('B', 'E'), ('E', 'D'), ('D', 'F'), ('F', 'G')]

希望这有帮助!

答案 1 :(得分:2)

试试这个

>>> [(list[i-1], list[i]) for i in range(1, len(list))]
[('S', 'B'), ('B', 'E'), ('E', 'D'), ('D', 'F'), ('F', 'G')]

答案 2 :(得分:0)

>>>b=[]
>>> for ind,i in enumerate(list):
...  if ind < len(list)-1:
...   b.append((list[ind],list[ind+1]))
...
>>> print b
[('S', 'B'), ('B', 'E'), ('E', 'D'), ('D', 'F'), ('F', 'G')]