假设我有一个像baseWord
这样的字符串;如何在不使用括号(str
)的情况下将其打印为num = "12345"
或1
这样的字符?
答案 0 :(得分:1)
括号可能是正确的方法,为什么不想让你使用呢?
无论如何,您可以unpack your string(只能使用Python 3作为@DeepSpace精确处理),如下所示:
letter, *_ = num
print(letter)
# "1"
它适用于任何地方的多个变量:
letter_1, *_, letter_2 = num
print(letter_1, letter_2)
# "1", "5"
还有operator.getitem(a, b)
,其行为类似括号,但作为函数:
from operator import getitem
letter = getitem(num, 0)
print(letter)
# "1"
最后,正如@EliKorvigo指出的那样,operator.itemgetter(item)
创建了一个像括号一样的函数:
from operator import itemgetter
getter = itemgetter(3)
letter = getter(num)
print(letter)
# "4"
答案 1 :(得分:0)
另一种滥用Python的功能。
您可以遍历字符串并仅打印位于特定位置的值。
num = '12345'
values = (0, 1)
for i, n in enumerate(num):
if i in values:
print(n)
答案 2 :(得分:0)
使用迭代器:
chars = iter("12345")
print(next(chars)) # 1
print(next(chars)) # 2
答案 3 :(得分:0)
您可以使用itertools.islice()
:
>>> from itertools import islice
>>> num = '123456'
>>> ''.join(islice(num, 0, 1)) # same as num[0]
'1'
>>> n = 4
>>> ''.join(islice(num, n, n+1)) # same as num[4]
'5'
>>> n = 100
>>> ''.join(islice(num, n, n+1)) # _not_ the same as num[100]
''
>>> num[100]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
其他方法包括在输入字符串上循环所需的次数:
num = '123456'
n = 5
for i, c in enumerate(num):
if i == n:
print(c)
break
# 6
或者从字符串的列表副本中弹出项目:
num = '123456'
l = list(num)
n = 5
for i in range(n):
try:
_ = l.pop(0)
except IndexError:
break
print(l.pop(0))
# 6
或循环遍历字符串的迭代器版本:
num = '123456'
it = iter(num)
n = 5
for i in range(n):
_ = next(it)
print(next(it))
另一种方法是使用collections.deque
:
from collections import deque
num = '123456'
d = deque(num)
n = 5
d.rotate(-n)
print d.popleft()
虽然你想要长时间检查它,以防你旋转超过字符串的长度。