วิธีรับถ่านจากสตริงโดยดัชนี?


93

สมมติว่าฉันมีสตริงที่ประกอบด้วย x ตัวอักษรที่ไม่รู้จัก ฉันจะหาถ่านได้อย่างไร 13 หรือถ่าน nr. x-14?

คำตอบ:


131

ขั้นแรกตรวจสอบให้แน่ใจว่าตัวเลขที่ต้องการเป็นดัชนีที่ถูกต้องสำหรับสตริงตั้งแต่จุดเริ่มต้นหรือจุดสิ้นสุดจากนั้นคุณสามารถใช้สัญกรณ์ตัวห้อยของอาร์เรย์ได้ ใช้len(s)เพื่อรับความยาวสตริง

>>> s = "python"
>>> s[3]
'h'
>>> s[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[0]
'p'
>>> s[-1]
'n'
>>> s[-6]
'p'
>>> s[-7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> 

1
คุณสามารถส่งจำนวนเต็มลบ
Aviram Segal

@AviramSegal ขอบคุณสำหรับการแก้ไขใช่เราทำได้ แต่ควรอยู่ในขีดจำกัดความยาวของสตริงด้วย
DhruvPathak

1
หลังจากที่คุณแก้ไขคำตอบที่ดีที่สุดแล้วให้โหวตขึ้นแทนที่จะลง :)
Aviram Segal

1
คำตอบนี้สามารถปรับปรุงได้โดยใช้คำอื่นที่มีอักขระไม่ซ้ำกันในแต่ละดัชนี ในฐานะที่เป็น s [3] มีความคลุมเครือว่า "l" กำลังจะกลับมา
ต่อผู้ใช้ใหม่

1
เหตุใดจึงs[-5]ใช้งานได้ แต่s[-6]จะบ่นว่าดัชนีอยู่นอกช่วงผิดพลาด อยากรู้มากเกี่ยวกับการนำไปใช้ในวัตถุสตริงใน Python
Alston

5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

ตอนนี้สำหรับช่วงดัชนีที่เป็นบวกสำหรับ x คือตั้งแต่ 0 ถึง 44 (เช่นความยาว - 1)

In [3]: x[0]
Out[3]: 'a'
In [4]: x[45]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

/home/<ipython console> in <module>()

IndexError: string index out of range

In [5]: x[44]
Out[5]: 's'

สำหรับดัชนีเชิงลบดัชนีจะอยู่ในช่วง -1 ถึง -45

In [6]: x[-1]
Out[6]: 's'
In [7]: x[-45]
Out[7]: 'a

สำหรับดัชนีเชิงลบค่าลบ [ความยาว -1] คือค่าสุดท้ายที่ถูกต้องของดัชนีบวกจะให้องค์ประกอบรายการที่สองเนื่องจากรายการถูกอ่านในลำดับย้อนกลับ

In [8]: x[-44]
Out[8]: 'n'

อื่น ๆ ตัวอย่างของดัชนี

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'

คุณควรเสนอคำอธิบายด้วยวาจาถึงสิ่งที่เกิดขึ้นแม้ว่าคำถามอาจดูเหมือนพื้นฐานสำหรับคุณ
Hannele

อัปเดตคำตอบพร้อมคำอธิบายหวังว่าจะช่วยได้ :)
avasal

3

คำตอบก่อนหน้านี้ครอบคลุมเกี่ยวกับASCII characterดัชนีที่แน่นอน

เป็นเรื่องยากเล็กน้อยที่จะได้รับUnicode characterดัชนีที่แน่นอนใน Python 2

เช่นมีs = '한국中国にっぽん'ซึ่งเป็น<type 'str'>,

__getitem__เช่นs[i]ไม่นำคุณไปสู่ที่ที่คุณปรารถนา มันจะคายออก semething เช่น (อักขระ Unicode จำนวนมากมีมากกว่า 1 ไบต์ แต่__getitem__ใน Python 2 จะเพิ่มขึ้นทีละ 1 ไบต์)

ในกรณี Python 2 นี้คุณสามารถแก้ปัญหาได้โดยการถอดรหัส:

s = '한국中国にっぽん'
s = s.decode('utf-8')
for i in range(len(s)):
    print s[i]


1

อีกหนึ่งตัวอย่างที่แนะนำสำหรับการทำความเข้าใจรายการและดัชนี:

L = ['a', 'b', 'c']
for index, item in enumerate(L):
    print index + '\n' + item

0
a
1
b
2
c 

0

สิ่งนี้ควรชี้แจงประเด็นเพิ่มเติม:

a = int(raw_input('Enter the index'))
str1 = 'Example'
leng = len(str1)
if (a < (len-1)) and (a > (-len)):
    print str1[a]
else:
    print('Index overflow')

อินพุต 3 เอาต์พุตม

อินพุต -3 เอาต์พุต p


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.