如何将用户输入的整数拆分为一个列表,其中每个条目都是 2 位数字?
How to split user input integer into a list, where each entry is 2 digits?
我正在尝试将任意长的用户输入整数拆分为一个列表,其中每个条目都是 2 位数字,如果该数字有奇数个整数,则将唯一的一位数字作为第一位数字。 (然后我将继续在它前面放一个零)
我知道将用户输入的整数放入列表中类似于:
userintegerlist = [int(i) for i in str(user_input)]
print userintegerlist
我的输入(比如 45346
)看起来像 [4,5,3,4,6]
。但我希望它看起来像:[4,53,46]
。或者如果输入是 68482238
,它将是:[68,48,22,38]
.
这可能吗?顺便说一句,所有代码都在Python中。
s = raw_input()
if(len(s)%2 ==1):
s = '0'+s
list = []
for i in range(len(s)/2):
list.append(int(s[2*i:2*i+2]))
print list
输入字符串后,检查其长度是否为奇数,如果是,则在其前面加一个0。
然后,遍历字符串,一次取两个字符,将该子字符串转换为 int,并将其追加到列表中。
就是这么简单。
>>> split = lambda s: (len(s)&1 and [s[0]] or []) + [s[i-1]+s[i] for i in range(len(s)-1,0,-2)][::-1]
>>> split("45346")
['4', '53', '46']
>>> split("68482238")
['68', '48', '22', '38']
给定一个输入,例如 '12345'
,您可以做的是将它变成一个列表,然后反向迭代它,尝试一次弹出两个元素,然后将它们插入列表的开头作为整数(将它们连接在一起之后)。
如果弹出第二个元素失败,则只需为弹出的元素添加前缀 0,并将其插入到输出列表的开头。
这是一个非常肮脏的解决方案,尝试这样做:
def foo(user_input):
transformed_input = list(user_input)
out = []
while transformed_input:
a = transformed_input.pop()
try:
b = transformed_input.pop()
a = b + a
except IndexError:
a = '0' + a
out.insert(0, a)
return out
对于 '345'
这样的输入,您会得到 ['03', '45']
然后 '3456'
你得到 ['34', '56']
这是你想要的吗?
您可以很容易地使用字符串方法来做到这一点,正如其他答案已经显示的那样。我引导你到相关的 grouper recipe in itertools。
我想提一下,用数学来做可能更有效:
>>> n = 45346
>>> output = []
>>> while n:
... output.append(n % 100)
... n //= 100
...
>>> output = output[::-1]
>>> print output
[4, 53, 46]
我的代码中的策略是创建一个镜像列表并将两个列表之间的元素配对
user_input = '123192873918271'
split_input = list(user_input)
#EXAMINE WHETHER THE LIST HAS AND ODD OR EVENT NUMBER OF ENTRIES
if len(user_input)%2==1 :
#create a mirror list that we will pair the original one
mirror_list = ['0']+ split_input
#pair up the elements in both lists
final_list = [i+j for i,j in zip(mirror_list, split_input)]
elif len(user_input)%2==0:
#in this case, we pair up the list with itself, with a 1 element shift
final_list = [i+j for i,j in zip(split_input[:-1], split_input[1:])]
for i in final_list:
print i
01
12
23
31
19
92
28
87
73
39
91
18
82
27
71
您可以使用对上的相同迭代器对项目进行分组,而无需对字符串使用任何索引:
user_input = '45346'
user_input = '0'+user_input if len(user_input)%2 else user_input
gi = [iter(user_input)]*2
r = [''.join(z) for z in zip(*gi)]
print(r)
生产
['04', '53', '46']
代码:
import math
n = 2384920394837493
print([(n//(100**i))%100 for i in range(math.ceil(math.log(n, 100)), -1, -1)][bool(math.log(n,100)%1):]
输出:
[23, 84, 92, 3, 94, 83, 74, 93]
我正在尝试将任意长的用户输入整数拆分为一个列表,其中每个条目都是 2 位数字,如果该数字有奇数个整数,则将唯一的一位数字作为第一位数字。 (然后我将继续在它前面放一个零)
我知道将用户输入的整数放入列表中类似于:
userintegerlist = [int(i) for i in str(user_input)]
print userintegerlist
我的输入(比如 45346
)看起来像 [4,5,3,4,6]
。但我希望它看起来像:[4,53,46]
。或者如果输入是 68482238
,它将是:[68,48,22,38]
.
这可能吗?顺便说一句,所有代码都在Python中。
s = raw_input()
if(len(s)%2 ==1):
s = '0'+s
list = []
for i in range(len(s)/2):
list.append(int(s[2*i:2*i+2]))
print list
输入字符串后,检查其长度是否为奇数,如果是,则在其前面加一个0。 然后,遍历字符串,一次取两个字符,将该子字符串转换为 int,并将其追加到列表中。 就是这么简单。
>>> split = lambda s: (len(s)&1 and [s[0]] or []) + [s[i-1]+s[i] for i in range(len(s)-1,0,-2)][::-1]
>>> split("45346")
['4', '53', '46']
>>> split("68482238")
['68', '48', '22', '38']
给定一个输入,例如 '12345'
,您可以做的是将它变成一个列表,然后反向迭代它,尝试一次弹出两个元素,然后将它们插入列表的开头作为整数(将它们连接在一起之后)。
如果弹出第二个元素失败,则只需为弹出的元素添加前缀 0,并将其插入到输出列表的开头。
这是一个非常肮脏的解决方案,尝试这样做:
def foo(user_input):
transformed_input = list(user_input)
out = []
while transformed_input:
a = transformed_input.pop()
try:
b = transformed_input.pop()
a = b + a
except IndexError:
a = '0' + a
out.insert(0, a)
return out
对于 '345'
这样的输入,您会得到 ['03', '45']
然后 '3456'
你得到 ['34', '56']
这是你想要的吗?
您可以很容易地使用字符串方法来做到这一点,正如其他答案已经显示的那样。我引导你到相关的 grouper recipe in itertools。
我想提一下,用数学来做可能更有效:
>>> n = 45346
>>> output = []
>>> while n:
... output.append(n % 100)
... n //= 100
...
>>> output = output[::-1]
>>> print output
[4, 53, 46]
我的代码中的策略是创建一个镜像列表并将两个列表之间的元素配对
user_input = '123192873918271'
split_input = list(user_input)
#EXAMINE WHETHER THE LIST HAS AND ODD OR EVENT NUMBER OF ENTRIES
if len(user_input)%2==1 :
#create a mirror list that we will pair the original one
mirror_list = ['0']+ split_input
#pair up the elements in both lists
final_list = [i+j for i,j in zip(mirror_list, split_input)]
elif len(user_input)%2==0:
#in this case, we pair up the list with itself, with a 1 element shift
final_list = [i+j for i,j in zip(split_input[:-1], split_input[1:])]
for i in final_list:
print i
01
12
23
31
19
92
28
87
73
39
91
18
82
27
71
您可以使用对上的相同迭代器对项目进行分组,而无需对字符串使用任何索引:
user_input = '45346'
user_input = '0'+user_input if len(user_input)%2 else user_input
gi = [iter(user_input)]*2
r = [''.join(z) for z in zip(*gi)]
print(r)
生产
['04', '53', '46']
代码:
import math
n = 2384920394837493
print([(n//(100**i))%100 for i in range(math.ceil(math.log(n, 100)), -1, -1)][bool(math.log(n,100)%1):]
输出:
[23, 84, 92, 3, 94, 83, 74, 93]