ลองพิจารณาสถานการณ์ที่คุณมีลิสต์ที่ประกอบด้วยลิสต์เป็นองค์ประกอบ เราสนใจหาความถี่ของตัวอักษรหนึ่งตัวที่ตำแหน่งต่างๆ ของลิสต์ภายใน ตัวอย่างด้านล่างจะชี้แจงความต้องการ
พิจารณาลิสต์ของลิสต์ที่กำหนดด้านล่าง
listA = [['a', 'a', 'b'], ['a', 'c', 'b'], ['c', 'a', 'b'], ['c', 'a', 'a']]
ในลิสต์ข้างต้นเรามีองค์ประกอบเป็นลิสต์ที่มี 3 องค์ประกอบ หากพิจารณาลิสต์ภายในแรก มี a,a,b ที่ตำแหน่ง 0,1,2 เช่นเดียวกันสำหรับลิสต์ที่ 3 คือ c,a,b ที่ 0,1,2 พิจารณาลิสต์ภายในทั้งหมด เราบอกได้ว่าความถี่ของ a ที่ตำแหน่ง 0 คือ 2 และตำแหน่ง 1 คือ 3 และตำแหน่ง 2 คือ 1
โปรแกรมด้านล่างมุ่งหาค่าเหล่านี้สำหรับองค์ประกอบใดๆ ในลิสต์ของลิสต์
ใช้ pandas
ไลบรารี pandas ใช้อย่างกว้างขวางสำหรับการจัดการข้อมูลโดยสร้าง DataFrame ดังนั้นเราสร้าง DataFrame และวนลูปผ่านมันด้วย where clause เพื่อหาว่าค่า 'a' มีอยู่ในแต่ละตำแหน่งใน Data Frame หรือไม่
ตัวอย่าง
import pandas as pd
# Given list of lists
listA = [['a', 'a', 'b'], ['a', 'c', 'b'], ['c', 'a', 'b'], ['c', 'a', 'a']]
# using pandas
df = pd.DataFrame(listA)
res = df.where(df == 'a', 0).where(df != 'a', 1)
# Result
print("Occurrence of 'a' at 0,1 and 2 position\n", res.sum())
Output
การรันโค้ดข้างต้นให้ผลลัพธ์ดังนี้ -
Occurrence of 'a' at 0,1 and 2 position 0 2.0 1 3.0 2 1.0
ด้วย zip
เราสามารถใช้ลูป for เพื่อวนลูปผ่านแต่ละตำแหน่งในสับลิสต์ในลิสต์และใช้ฟังก์ชัน zip กับลิสต์ของลิสต์ทั้งหมด
ตัวอย่าง
# Given list of lists
listA = [['a', 'a', 'b'], ['a', 'c', 'b'], ['c', 'a', 'b'], ['c', 'a', 'a']]
res = [elem.count('a') for elem in zip(*listA)]
# Result
print("Occurrence of 'a' at 0,1 and 2 position\n", res)
Output
การรันโค้ดข้างต้นให้ผลลัพธ์ดังนี้ -
Occurrence of 'a' at 0,1 and 2 position [2, 3, 1]