Ukrainian international Zinchenko took the armband in his first appearance since Russia's invasion of Ukraine.
Fernandinho had initially been listed as City skipper for the tie, but the Brazilian, who signed from Ukrainian side Shakhtar Donetsk, offered the role to Zinchenko in a show of solidarity.
Zinchenko attended an anti-war vigil in Manchester city centre last week following the start of the invasion and sent a since-deleted social media message that was fiercely critical of Russian President Vladimir Putin.
"I think it will be good for him to play and show the reason why he is here," City manager Pep Guardiola had said on Monday.
"He is a magnificent player and needs to play football."
Zinchenko and Peterborough captain Frankie Kent held a Ukrainian flag together as they led the teams out at the start of the match.
Once the action got underway, Guardiola's men took time to make the breakthrough against a side sitting bottom of the Championship.
Mahrez was one of six changes made by Guardiola and took his tally for the season to an impressive 19 goals in just 32 appearances.
The Algerian cleverly guided the ball into the far corner from a narrow angle on the hour mark.
Grealish has had a far less productive season since his £100 million ($134 million) move from Aston Villa.
But he marked his return from injury with a sublime touch to control Phil Foden's long through ball before slotting past Steven Benda for his fourth City goal.