[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
ฉันจะคืนค่าที่ 2 จากทูเปิลแต่ละตัวในรายการนี้ได้อย่างไร
ผลลัพธ์ที่ต้องการ:
[2, 3, 5, 4, 7, 7, 8]
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
ฉันจะคืนค่าที่ 2 จากทูเปิลแต่ละตัวในรายการนี้ได้อย่างไร
ผลลัพธ์ที่ต้องการ:
[2, 3, 5, 4, 7, 7, 8]
คำตอบ:
คำตอบของอิกนาซิโอคือสิ่งที่คุณต้องการ อย่างไรก็ตามในฐานะที่มีคนเรียน Python เช่นกันให้ฉันลองแยกมันให้คุณ ... ดังที่ได้กล่าวไปแล้วมันเป็นความเข้าใจในรายการ (ครอบคลุมในDiveIntoPython3เป็นต้น) นี่คือบางจุด:
[x[1] for x in L]
[]
รอบบรรทัดของรหัส นี่คือสิ่งที่กำหนดรายการ สิ่งนี้จะบอกคุณว่ารหัสนี้ส่งคืนรายการดังนั้นจึงเป็นlist
ประเภท ดังนั้นเทคนิคนี้จึงเรียกว่า "การทำความเข้าใจรายการ"L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
ก่อนที่จะเรียกใช้โค้ดด้านบนx
เป็นตัวแปรที่มีอยู่เพียง แต่ในความเข้าใจ - พยายามที่จะเข้าถึงx
ด้านนอกของความเข้าใจหรือชนิดtype(x)
หลังจากรันบรรทัดข้างต้นและมันจะบอกคุณNameError: name 'x' is not defined
ในขณะที่ผลตอบแทนtype(L)
<class 'list'>
x[1]
ชี้ไปที่รายการที่สองในแต่ละรายการในขณะที่x[0]
จะชี้ไปที่แต่ละรายการแรกยากที่จะบอกว่าคุณพยายามแก้ปัญหาก่อนที่จะถามคำถามมากแค่ไหน แต่บางทีคุณอาจไม่คุ้นเคยกับความเข้าใจ? ฉันจะใช้เวลาอ่านบทที่ 3 ของ DiveIntoPythonหรือแหล่งข้อมูลใด ๆ เกี่ยวกับความเข้าใจ โชคดี.
x
จะอยู่นอก LC โดยมีค่าสุดท้ายที่ผูกไว้ สิ่งนี้ได้รับการแก้ไขใน 3.x
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
แต่มันไม่ง่ายอย่างที่คิด
ความเข้าใจในรายการเป็นวิธีการทำเช่นนี้อย่างแน่นอน อีกวิธีหนึ่งที่ควรเร็วกว่าคือmap
และitemgetter
.
import operator
new_list = map(operator.itemgetter(1), old_list)
เพื่อตอบสนองต่อความคิดเห็นที่ OP ไม่สามารถหาคำตอบใน Google ได้ฉันจะชี้ให้เห็นถึงวิธีที่ไร้เดียงสาสุด ๆ ในการทำ
new_list = []
for item in old_list:
new_list.append(item[1])
สิ่งนี้ใช้:
append
เมธอดในรายการหากใครบางคนกำลังพยายามเรียนรู้ภาษาและไม่สามารถรวบรวมชิ้นส่วนพื้นฐานเหล่านี้ด้วยตัวเองได้พวกเขาก็ต้องมองว่ามันเป็นการออกกำลังกายและลงมือทำด้วยตัวเองแม้ว่าจะใช้เวลายี่สิบชั่วโมงก็ตาม
หนึ่งในความต้องการที่จะเรียนรู้วิธีการที่จะคิดเกี่ยวกับสิ่งที่ใครอยากและเปรียบเทียบกับเครื่องมือที่สามารถใช้ได้ ทุกองค์ประกอบในคำตอบที่สองของฉันควรอยู่ในบทช่วยสอนพื้นฐาน คุณไม่สามารถเรียนรู้ในการเขียนโปรแกรมโดยไม่ต้องอ่านอย่างใดอย่างหนึ่ง
คุณยังสามารถใช้ลำดับการแกะกล่องด้วยzip
:
L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
_, res = zip(*L)
print(res)
# (2, 3, 5, 4, 7, 7, 8)
นอกจากนี้ยังสร้างทูเปิล_
จากองค์ประกอบแรกที่ถูกทิ้ง สามารถแยกได้เฉพาะวินาที แต่มีรายละเอียดมากกว่า:
from itertools import islice
res = next(islice(zip(*L), 1, None))
หรือคุณสามารถใช้pandas
:
>>> import pandas as pd
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> df=pd.DataFrame(L)
>>> df[1]
0 2
1 3
2 5
3 4
4 7
5 7
6 8
Name: 1, dtype: int64
>>> df[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
หรือnumpy
:
>>> import numpy as np
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> arr=np.array(L)
>>> arr.T[1]
array([2, 3, 5, 4, 7, 7, 8])
>>> arr.T[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))