在没有括号的Python中切割字符串

时间:2016-07-10 08:34:40

标签: python string slice

假设我有一个像baseWord这样的字符串;如何在不使用括号(str)的情况下将其打印为num = "12345"1这样的字符?

4 个答案:

答案 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()

虽然你想要长时间检查它,以防你旋转超过字符串的长度。